解题思路:
小学二年纪的加法运算还记得不?就是那个列竖式计算(如下图),原理就是这个,只不过列竖式计算的时候从左到右是从高位到地位,例如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语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:533 |
简单的a+b (C语言代码)浏览:652 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:730 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:867 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:509 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:632 |
用筛法求之N内的素数。 (C语言代码)浏览:649 |
1124题解浏览:595 |
1126题解浏览:594 |
矩阵乘方 (C语言代码)浏览:1030 |