解题思路:
如果想要通过系统测试,下面这段简单的代码足矣:
#include <stdio.h> int main() { int a,b; while(~scanf("%d%d",&a,&b)) { printf("%d\n\n",a+b); } return 0; }
如果想要满足竞赛要求,就不得不提一下 大数加法了!
基本思路为使用一个数组将所需要求得大数字存起来,然后进行倒叙相加,发现超过十之后取模进位,再倒叙输出去多余的0即可。
按从低位到高位的顺序两个数字的每一位对应相加,并加上低一位的进位(如果有进位的话),如果某一位对应的数字加起来大于10,就对10取模得到当前位上的数字,再向高位进1,然后再考虑更高一位数字的相加,依次类推,如果位数较长的那个数字的最高位还有进位,别忘记了位数还要增加1。
注意事项:
题目要求是空一行。所以最后得要2个回车或者两个endl。
参考代码:
#include <iostream> #include <string> using namespace std; string BigDataAdd(string,int,string,int); //函数声明 int main() { string a,b; while(cin>>a>>b) { if(a.size()<b.size()) //这个if的作用是把长字符串放在a中! { string temp=a; a=b; b=temp; } cout<<BigDataAdd(a,a.size(),b,b.size())<<endl<<endl; } return 0; } string BigDataAdd(string a,int lena,string b,int lenb) { int aa,bb,sum,flag=0; //flag用来保存进位,默认为0 while(lena>0) { aa=a[lena-1]-'0'; //a[lena-1]-'0'为把a字符串的最后一个字符转换成数字。 if(lenb>0) //判断b字符串是否有字符了,是否为空串。 bb=b[lenb-1]-'0'; //b中还有字符,则将b字符串的最后一个字符转为数字 else //b为空串 bb=0; sum=aa+bb+flag; if(sum>=10) //和>=10,则产生进位 { a[lena-1]='0'+sum%10; //sum%10取个位 flag=1; //进位标志设为1 } else { a[lena-1]='0'+sum; flag=0; } lena--; lenb--; } if(flag==1) //如果最高位前面还有进位的话 a='1'+a; //字符串追加 把1加在其前面 return a; }
编译环境:
Windows 10 China HuaWei Source Insight 4.0
Linux Debain Ubuntu/Kali g++
程序测试:
0.0分
8 人评分