模拟,竖式计算乘法。
没有测试效率。欢迎更好的高精度乘法。
#include <iostream> #include <memory.h> using namespace std; char a[100],b[100];//a是乘数,b是被乘数 int len_a,len_b;//a,b的长度 int c[205];//c为结果的存储 void mul(char a[],char b[],int l_a, int l_b) { int i,j; for(i = l_a-1;i >= 0; i--) { for(j = l_b - 1; j >= 0; j--) { c[i+j+2] = c[i+j+2] + (a[i] -'0') * (b[j] - '0'); //计算乘数a的第i位与被乘数的每一位相乘之后存放在对应的数组位置上 //然后计算每一位上数字的和 //这个操作比较好,保证了相乘之后相加形成了错位, //易于进行C[]每一位相加操作 } } for(i = l_a+l_b; i >= 0; i--) { //将每一位数字上确保是<10的数字 c[i-1] = c[i-1] + c[i]/10; c[i] = c[i] % 10; } bool flag = true;//标记是不是0*0 //找到第一个不为0的数字输出,屏蔽前导0 i = 0; while(c[i] == 0) { i++; } for(;i<=l_a+l_b;i++) { flag = true; cout<<c[i]; } if(!flag) cout<<"0"; cout<<endl; } int main() { while(cin>>a>>b) { len_a = strlen(a); len_b = strlen(b); memset(c,0,sizeof(c)); mul(a,b,len_a,len_b); } }