解题思路:    

    为了节省空间,全部都用字符串保存数据。

    字符串a,b,c分别保存大整数a,b,c;先逆序a,b,然后从低位开始求和一直到最高位即可。

    (1)输入a,b;

    (2)逆序a,b,并求和放到c中;

    (3)逆序c,最后输出结果即可。


注意事项:

    注意进位问题,每一步都可能有进位,最后也还会可能有进位。

参考代码:

#include <bits/stdc++.h>
using namespace std; 
const int N=1010;
int main() 
{
    char a[N],b[N]; //保存大整数a,b 
    char c[N];     //保存最后结果 
    cin>>a;
    cin>>b;
    int lena=strlen(a); //求a的长度 
    int lenb=strlen(b); //求b的长度
    reverse(a,a+lena);  //逆序a 
    reverse(b,b+lenb);  //逆序b 
    int lenc=lena>lenb?lena:lenb; //c的长度 
    int min=lena<lenb?lena:lenb;  //最小长度 
    int carry=0;        //进位 
    for(int i=0;i<min;i++) 
    {
    	int temp=(a[i]-'0')+(b[i]-'0')+carry;
    	c[i]=temp%10+'0';
    	carry=temp/10;   	
    }
	if(lena>lenb)  //a比较长,则把a剩余部分放到c中去,但是要考虑进位 
    {
    	for(int i=lenb;i<lena;i++)
    	{
    		int temp=(a[i]-'0')+carry;
    		c[i]=temp%10+'0';
    		carry=temp/10;
    	}   		
    }
    else if(lenb>lena)  //b比较长,则把b剩余部分放到c中去,但是要考虑进位 
    {
    	for(int i=lena;i<lenb;i++)
    	{
    		int temp=(b[i]-'0')+carry;
    		c[i]=temp%10+'0';
    		carry=temp/10;
    	}    	
    }
    if(carry==1)  //最后如果有进位 
	{
		c[lenc++]='1';
	}
	c[lenc]=0; //字符串结束标记 
	reverse(c,c+lenc); //逆序c 
	cout<<c;    //输出字符串c 
    return 0;
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论