大数乘法
来源:互联网 发布:思纬网络 编辑:程序博客网 时间:2024/06/10 17:32
void Reverse(string &str){//字符串翻转 int Size = str.size(); int i = 0; int j = Size - 1; while(i < j){ char temp = str[i]; str[i++] = str[j]; str[j--] = temp; }}string Multiplic(string &big_num_a,string &big_num_b){//大数乘法 Reverse(big_num_a); Reverse(big_num_b); int n = big_num_a.size(); int m = big_num_b.size(); int big_num_len = m + n; int big_num_c[100]; memset(big_num_c,0,sizeof(big_num_c)); for(int i = 0;i < big_num_a.size();i++){//计算各个位数的和 for(int j = 0;j < big_num_b.size();j++){ big_num_c[i+j] += (big_num_a[i] - '0') * (big_num_b[j] - '0'); } } int c = 0;//进位 int t; for(int i = 0;i < m + n;i++){//进位计算 t = big_num_c[i] + c; big_num_c[i] = t % 10; c = t / 10; } if(!big_num_c[m+n-1]) big_num_len --; string strC; for(int i = big_num_len-1;i >=0;i--)//把得到的值进行翻转 strC += big_num_c[i] + '0'; return strC;}
0 0