HDU1002 A + B Problem II(修正版)
最近又开始做ACM题目了,昨天无意中翻阅自己写的一些blog,在07年写的一篇blog:http://www.cnblogs.com/phinecos/archive/2007/12/22/1011028.html,发现评论中有朋友报了一个bug,随手调试了下程序,发现错误原因在于少了“++”,不过那代码也是AC了的,这说明OJ的测试数据有问题。特此修正代码如下:
#include <iostream>
#include <string>
using namespace std;
void Add(string a,string b,char sum[],int& count)
{//大数加法
int len1 = a.length();//数a的长度
int len2 = b.length();//数b的长度
int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为
count = 0;
//从最后一位开始做加法
while(i>=0&&j>=0)
{
temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位
sum[count++] = temp%10+'0';
carryIn = temp/10;//计算进位
--i;
--j;
}
//第一个数还有剩余
if(i>=0)
{
//利用进位继续做
while(i>=0)
{
temp = a[i]-'0'+carryIn;
sum[count++] = temp%10+'0';
carryIn = temp/10;
--i;
}
}
//第二个数还有剩余
if(j>=0)
{
while(j>=0)
{
temp = b[j]-'0'+carryIn;
sum[count++] = temp%10+'0';
carryIn = temp/10;
--j;
}
}
//最高位特殊考虑下
if(carryIn>0)
{
sum[count++] = '1';
}
}
void reversePrint(char arr[],int len)
{//逆向输出
for(int i=len-1;i>=0;--i)
{
cout<<arr[i];
}
cout<<endl;
}
int main()
{
string a,b;
char sum[2000];//和
memset(sum,'0',2000);
int nCount = 0;
int caseNum,curCase=0;
cin>>caseNum;
do
{
curCase++;
cin>>a>>b;
Add(a,b,sum,nCount);
cout<<"Case "<<curCase<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
reversePrint(sum,nCount);
if(curCase<caseNum)
{
cout<<endl;
}
}while(curCase<caseNum);
return 0;
}
#include <string>
using namespace std;
void Add(string a,string b,char sum[],int& count)
{//大数加法
int len1 = a.length();//数a的长度
int len2 = b.length();//数b的长度
int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为
count = 0;
//从最后一位开始做加法
while(i>=0&&j>=0)
{
temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位
sum[count++] = temp%10+'0';
carryIn = temp/10;//计算进位
--i;
--j;
}
//第一个数还有剩余
if(i>=0)
{
//利用进位继续做
while(i>=0)
{
temp = a[i]-'0'+carryIn;
sum[count++] = temp%10+'0';
carryIn = temp/10;
--i;
}
}
//第二个数还有剩余
if(j>=0)
{
while(j>=0)
{
temp = b[j]-'0'+carryIn;
sum[count++] = temp%10+'0';
carryIn = temp/10;
--j;
}
}
//最高位特殊考虑下
if(carryIn>0)
{
sum[count++] = '1';
}
}
void reversePrint(char arr[],int len)
{//逆向输出
for(int i=len-1;i>=0;--i)
{
cout<<arr[i];
}
cout<<endl;
}
int main()
{
string a,b;
char sum[2000];//和
memset(sum,'0',2000);
int nCount = 0;
int caseNum,curCase=0;
cin>>caseNum;
do
{
curCase++;
cin>>a>>b;
Add(a,b,sum,nCount);
cout<<"Case "<<curCase<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
reversePrint(sum,nCount);
if(curCase<caseNum)
{
cout<<endl;
}
}while(curCase<caseNum);
return 0;
}
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
posted on 2009-09-14 09:41 Phinecos(洞庭散人) 阅读(1662) 评论(0) 编辑 收藏 举报