题解
题目难度:中等难度
知识点:字符串、大数相乘
模拟人工计算
计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。
数组a存储第一个数字123(逆序)
数组b存储第二数组20(逆序)
结果存入数组result
#include<iostream> #include<string> #include<cstdio> using namespace std; #define MAX 1010 int main(){ string num1, num2; cin>>num1>>num2; int len1 = num1.length(); int len2 = num2.length(); int a[MAX] = {0}; int b[MAX] = {0}; int result[2 * MAX] = {0}; int i = 0, j = 0; //将字符串转移到数组中,以方便计算 ,倒叙存储 for(i = len1 - 1, j = 0; i >= 0; i--, j++) { a[j] = num1[i] - '0'; } for(i = len2 - 1, j = 0; i >= 0; i--, j++){ b[j] = num2[i] - '0'; } //将结果储存在 resullt中,result[i + j] = a[i] * b[j] for(i = 0; i < len1; i++){ for(j = 0; j < len2; j++) { result[i + j] += a[i] * b[j]; } } //从低位到高位进行进位 for(i = 0; i < (len1+len2); i++){ if(result[i] > 9){ result[i+1] += result[i]/10; result[i] %= 10; } } //将前导0全部剔掉,比如我们结果是236,在result中 for(i = len1 + len2; i >= 0 ; i--){ if(result[i] == 0) continue; else break; } //接着i继续输出,就是我们的结果? for(; i >=0; i--) cout<<result[i]; return 0; }