解题思路:
如果想要通过系统测试,下面这段简单的代码足矣:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复