解题思路: 将从终端读取到的数字从低位开始依次存放到数组中,以便解决结果数位数增加的问题
注意事项: 在乘数每一位数依次与被乘数相乘时,要记住本次计算的结果数的最高位的可能是大于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++代码)浏览:2181 |
三进制小数 (C语言代码)浏览:1017 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:572 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:677 |
【亲和数】 (C语言代码)浏览:855 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1107 |
三角形 (C++代码)递推浏览:755 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:574 |
sizeof的大作用 (C语言代码)浏览:1447 |