高精度乘法:
1 #include <iostream> 2 #include<string> 3 using namespace std; 4 int a[10007], b[10007], c[10000000];//c为最终答案 5 int aa, bb; 6 int main() 7 { 8 string s, ss; 9 cin >> s; 10 aa = s.size();//记录数字位数 11 for (int i = s.size() - 1, j = 0;i >= 0;i--, j++)//倒置,便于进位 12 a[j] = s[i] - ‘0‘;//转化为int型 13 cin >> s; 14 bb = s.size();//同上 15 for (int i = s.size() - 1, j = 0;i >= 0;i--, j++) 16 b[j] = s[i] - ‘0‘; 17 int k, sum, r; 18 for (int i = 0;i < bb;i++) { 19 k = i;//记录在第几位 20 r = 0;//记录进位 21 for (int j = 0;j < aa;j++) { 22 sum = a[j] * b[i] + r;//两数相乘加上进位 23 c[k++]+= sum % 10;//将第k位加上sum个位数,并将k+1为k = i做准备(在数中实际上体现为k+1位) 24 r = sum / 10;//记录进位 25 } 26 if (r)//当r不等于0时将其进位 27 c[k++] += r; 28 } 29 for (int i = 0;i < k;i++) {//进行进位操作 30 if (c[i] > 9) {//当第i位大于9时,进位 31 c[i + 1] += c[i] / 10; 32 c[i] %= 10; 33 } 34 } 35 if (c[k]!=0)//当c[k]不等于0时,证明发生进位操作,k(c数组长度)+1 36 k++; 37 for (int i = k-1;i >= 0;i--)//逆序输出 38 cout << c[i]; 39 return 0; 40 }
原文:https://www.cnblogs.com/20km-shimakaze/p/14770008.html