解题思路:由于是大数,所以只能用字符串保存输入的内容,然后逆序,然后再相加,再考虑进位。本题中用字符数组a,b保存输入的两个数,逆序后相加保存到整型数组c中,最后考虑进位情况。

注意事项:注意最后一次是否有进位。

参考代码:

#include <stdio.h>
#include <string.h>
#define N 1002
void reverse(char *s)  //逆序函数
{
	int len,i,j;
	char t;
	len=strlen(s);
	for(i=0,j=len-1;i<j;i++,j--)
	{
		t=s[i]; s[i]=s[j]; s[j]=t;
	}
}
int main()
{	
	char a[N]={0},b[N]={0};
	int  c[N]={0};
	int n,i,lena,lenb,lenc,jinwei;
	while(scanf("%s%s",a,b)!=EOF)
	{
		lena=strlen(a);  //求长度
		lenb=strlen(b);  
		reverse(a);      //逆序a
		reverse(b);	 //逆序b
		n=lena<lenb?lena:lenb;
		for(i=0;i<n;i++)    //相加前面部分
			c[i]=(a[i]-'0') +(b[i]-'0');
		if(lena<lenb)
			for(i=lena;i<lenb;i++)  //复制后面一段
				c[i]=b[i]-'0';
		else
			for(i=lenb;i<lena;i++)  //复制后面一段
				c[i]=a[i]-'0';		
		lenc=lena>lenb?lena:lenb;	
		jinwei=0;			
		for(i=0;i<lenc;i++)   //考虑进位情况
		{
			c[i]+=jinwei;
			jinwei=c[i]/10;
			c[i]=c[i]%10;
		}
		if(jinwei==1)    //最后一位是否有进位
		{
			lenc++;
			c[i]=1;
		}
		for(i=lenc-1;i>=0;i--)  //输出全部
			printf("%d",c[i]);
		printf("\n");		
	}
    return 0;
}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论