解题思路:

小学二年纪的加法运算还记得不?就是那个列竖式计算(如下图),原理就是这个,只不过列竖式计算的时候从左到右是从高位到地位,例如234(2是百位,4是个位),而现在这个题的原理是从左到右是从低位到高位(为了方便数组运算),例如234(实际4是百位,2是个位);用两个数组存放两个大数,这个的话两个数组相加a[0]+b[0]就是两个数的个位相加,a[1]+b[1]就是两个数的十位相加,再用一个变量记录进位,进位参与下一位的计算,依次运算下去,就解决了

注意事项:

QQ图片.png


参考代码:

#include<stdio.h>
#include<string.h>
#define MAX 101
char a[MAX];//用字符数组存储大数
char b[MAX];
int a1[MAX]={0};//把char类型转换成整形,便于计算,并全赋值为0,便于下边计算
int b1[MAX]={0};
int c[MAX];//存储最终结果
int len1,len2;
void s1()
{
	int i;
	scanf("%s",a);
	scanf("%s",b);
	len1=strlen(a);//求数组长度
	len2=strlen(b);
	for(i=0;i<len1;i++)
	{
		a1[i]=a[len1-i-1]-'0';//高低位变换
	}
	for(i=0;i<len2;i++)
	{
		b1[i]=b[len2-i-1]-'0';
	}
}
int main()
{
	s1();
	int i;
	int k=0,t,m;//k用来存储进位,进位参与下一位的计算,例如十位的进位参与百位的计算
	for(i=0;i<MAX;i++)
	{
		t=a1[i]+b1[i]+k;//t存储运算结果
		c[i]=t%10;
		k=t/10;
	}
	m=MAX-1;
	while(c[m]==0)//,从后往前遍历数组,m记录数组中最后一个不为0的数
	{
		m--;
	}
	for(i=m;i>=0;i--)//反向输出,高低位变换,即为结果!
	{
		printf("%d",c[i]);
	}
}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论