解题思路: 将从终端读取到的数字从低位开始依次存放到数组中,以便解决结果数位数增加的问题
注意事项: 在乘数每一位数依次与被乘数相乘时,要记住本次计算的结果数的最高位的可能是大于9,应当在每次乘完后处理。
参考代码:
#include<stdio.h> #include<string.h> int d1,d2; //存放s1,s2的长度 void transform(char s[],int a[]){ //字符转为数字 int i,k; k=strlen(s); for(i=0;i<k;i++) a[i]=(int)s[k-1-i]-48; } void mutiple(int a[],int b[],int c[],int *d){ //相乘 int i,j,k; for(i=0;i<d2;i++){ k=i; for(j=0;j<d1;j++,k++) { c[k+1]+=(a[j]*b[i]+c[k])/10;//进位的数加到下一位上(注意这样可能产生c[k+1]>9的情况) c[k]=(a[j]*b[i]+c[k])%10; } if(c[k]>9){ c[k+1]+=(a[j]+b[i]+c[k])/10; /*在解决掉每次计算时最高位上出现的c[k+1]>9的情况,即 再向高位进位*/ c[k]=c[k]%10; } } if(c[k]!=0) k++; //如果高1位不为0,该位有效 *d=k; } int main(){ int a[10000],b[10000]; int c[20002]={0}; int i,d; char s1[10001],s2[10001]; scanf("%s%s",s1,s2); transform(s1,a); transform(s2,b); d1=strlen(s1); d2=strlen(s2); mutiple(a,b,c,&d); for(i=d-1;i>=0;i--) printf("%d",c[i]); return 0; }
0.0分
1 人评分
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:664 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:912 |
C二级辅导-阶乘数列 (C语言代码)浏览:736 |
DNA (C语言描述,蓝桥杯)浏览:1653 |
1128题解(返回值为数组的情况)浏览:571 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
生日日数 (C语言代码)浏览:1574 |
1250题解浏览:603 |
很简单,,题解1041:C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:616 |
1415题求解浏览:681 |