题目
题目链接
题解
题目难度:中等难度
知识点:字符串、大数相乘
模拟人工计算
计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。
数组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<</cstdio></string></iostream>