解题思路:
如果想要通过系统测试,下面这段简单的代码足矣:#include
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
#include
using namespace std;
string BigDataAdd(string,int,string,int); //函数声明
int main()
{
string a,b;
while(cin>>a>>b)
{
if(a.size()
{
string temp=a;
a=b;
b=temp;
}
cout<
}
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++
程序测试:

本文介绍了一种解决大数加法问题的方法,利用数组存储大数并进行逐位相加处理,支持不同长度的大数运算,适用于竞赛及实际应用。
1万+

被折叠的 条评论
为什么被折叠?



