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

浙公网安备 33010602011771号