最近做PTA总是可以遇到很大位数的加法,今天又遇到了,sad sad
(不过打起精神!我们好好学习一下!)
尝试了longlong都装不下的数字,所以需要用数组进行计算。
基本思路呢,就是把数据一位一位放入数组中,通过加法运算和进位的小运算实现高精度加法,最后通过数组输出;
步骤分析(可以skip这个部分,直接看代码QAQ):- 用字符串先存储两个加数,这样子当然是便于一位一位地获取数字啦。
- 将len赋值为两个数据长度中的大者,作为计算的最高位也是最后输出时的最后一位(当然会有所变动哒~)
- 将数据倒序存储,因为我们计算时是 从低位开始 对应低位 计算的。顺手就把字符转成数值存储到新的int型数组里吧(记得str-'0')
- 另外,值得一提的是,我把数组初始化时都设置为0,这样即使两个数位数不一样,也可以用同一段代码实现加法。也便于最后算最高位时的进位。
- 前面都是准备工作,真正的计算很短。
- 从低位开始相加,如果结果满十则下一位加一,这一位就加余数;如果不满十,则直接赋值。
- 这样听起来很麻烦,但是用 aa[i]=aa[i]+bb[i]; aa[i+1]+=aa[i]/10; aa[i]=aa[i]%10;就可以解决.举个栗子:3/10=0 7%10=7 13/10=1 13%10=3.(应该可以看懂叭~)
- 然后还有一步需要解释,就是如果最高位进位了的话,最后显示的要多一位。
(关门,放图!!!!本人语言匮乏,幸好本人有手可以画图) - 最后就是去零和倒序输出了
#include#include #define N 1000 int main() { int t; char a[N]={0},b[N]={0},sum[N]={0}; int aa[N]={0},bb[N]={0}; scanf("%d",&t);//t组数据 for(int w=0;w lb?la:lb); //将输入的两个字符串倒序 并且 字符转换为数字赋值给aa,bb数组 for(i=la-1;i>=0;i--) aa[la - i - 1] = a[i] - '0'; for(i=lb-1;i>=0;i--) bb[lb - i - 1] = b[i] - '0'; //开始计算 for(i=0;i 1) len--; //去零 printf("Case %d:n%s + %s = ",w+1,a,b); for (int i = len - 1 ;i >= 0 ;i--) //倒序输出结果 printf("%d",aa[i]); if(w!=t-1) printf("nn"); else printf("n");//这些是格式,不必纠结 } }
2021.11.23
SThree楠钰子.



