大数相乘-蛮力法
输入:
a=1234 b=1234,求a*b的值。(小的数能看得清晰)
问题思路:
在运用笔算时的方法为:
两个数相乘的结果的位数一定不大于这两个数的长度总和。将红色区域的数存入数组中,判断大于10的进1,最后求出得数1522756。
代码:
#include<iostream> #include <stdio.h> #include <string.h> using namespace std; int main() { char a[1000],b[1000]; int c[2000]= {0}; gets(a); gets(b); int num=0; for(int i=strlen(a)-1; i>=0; i--) //c数组为下标0开始存数 { int k=num; for(int j=strlen(b)-1; j>=0; j--) { c[k]=c[k]+(a[i]-48)*(b[j]-48); k++; } num++; } for(int i=0; i<strlen(a)+strlen(b)-1; i++) //大于10的进1 { if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } } int d=0; for(int i=strlen(a)+strlen(b)-1; i>=0; i--) //标记多余0的个数 { if(c[i]==0) { d++; } else break; } for(int i=strlen(a)+strlen(b)-1-d; i>=0; i--) //输出结果 { cout<<c[i]; } return 0; }