posts - 7, comments - 13, trackbacks - 0, articles - 37
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

大数相加的优秀算法

Posted on 2008-08-14 09:39 岁月流逝 阅读(1871) 评论(2)  编辑 收藏 引用
#include <iostream>
using namespace std;
int main()
{
  char charA[1000],charB[1000];//用于存放两个整数
  int sum[1001];//存放两个整数的和
  memset(sum,0,sizeof(sum));//给sum[]赋值
  int n,i=1;
  cin>>n;
 while(n--)
 {cin>>charA>>charB;
  int sumIndex=0;
  int index=0;
  //把charA的值赋到sum里
  for (index=strlen(charA)-1,sumIndex=1000;index>=0;--index,--sumIndex)
  {
  sum[sumIndex]+=charA[index]-'0';
  }
  //把charB的值赋到sum里
  for (index=strlen(charB)-1,sumIndex=1000;index>=0;--index,--sumIndex)
  {
  sum[sumIndex]+=charB[index]-'0';
  }
  //如果sum元素的值大于9,则进位
  for (sumIndex=1000;sumIndex>=0;--sumIndex)
  {
  if (sum[sumIndex]>9)
  {
    sum[sumIndex-1]+=sum[sumIndex]/10;
    sum[sumIndex]%=10;
  }
  }
  //查找结果放在第几位
  for (sumIndex=0;sumIndex<=1000;++sumIndex)
  {
  if (sum[sumIndex]!=0)
  {
    break;
  }
  }
  //如果结果为0,则输出最后一位021
  if (sumIndex==1001)
  {
  sumIndex=1000;
  }
  cout<<"Case "<<i++<<":"<<endl;
  cout<<charA<<" + "<<charB<<" = ";
  for (;sumIndex<=1000;++sumIndex)
  {
  cout<<sum[sumIndex];
  }
  cout<<endl;
}
return 0;
}

Feedback

# re: 大数相加的优秀算法  回复  更多评论   

2009-03-15 22:18 by 最硬的石头
算法有误:

第二次计算实在第一次计算上就行,没有对第一次答案清零

# re: 大数相加的优秀算法  回复  更多评论   

2009-04-09 13:49 by nick
这也叫优秀算法,速度太慢了

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理