解题思路:
小学二年纪的加法运算还记得不?就是那个列竖式计算(如下图),原理就是这个,只不过列竖式计算的时候从左到右是从高位到地位,例如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语言代码)浏览:782 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:668 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:583 |
数列排序 (C语言代码)浏览:858 |
剪刀石头布 (C语言代码)浏览:1792 |
DNA (C语言描述,数据结构)浏览:909 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:366 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:821 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:537 |
C二级辅导-进制转换 (C语言代码)浏览:750 |