smartZhou


私信TA

用户名:smartZhou

访问量:1202

签 名:

刚注册不到一个月,多多关照!

排  名 77
经  验 3781
参赛次数 1
文章发表 87
年  龄 0
在职情况
学  校 T S university
专  业 计算机科学与技术

  自我简介:

解题思路:

如果想要通过系统测试,下面这段简单的代码足矣:

#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++

程序测试:

微信图片_20190105235534.png

  评论区