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

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