問題の説明
乗算20010 A A及びB * B.整数最大の正の小数を計算します
サンプル入力
1259
8
サンプル出力
10072
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int ans[40020] = {'\0'}, num_fir[20020] = {'\0'}, num_sec[20020] = {'\0'};
int main(void){
/*
注意对于string型
最好不要用printf和scanf
要用cout和cin来输入输出
*/
string fir_str, sec_str;
cin>>fir_str>>sec_str;
int len_a = fir_str.length();
int len_b = sec_str.length();
/*
倒叙存储 便于从低位开始乘法
*/
for(int i = 0; i < len_a; i++) num_fir[len_a - i - 1] = fir_str[i] - '0';
for(int i = 0; i < len_b; i++) num_sec[len_b - i - 1] = sec_str[i] - '0';
/* TEST
for(int i = 0; i < len_a; i++){
printf("%d", num_fir[i]);
}
*/
for(int i = 0; i < len_a; i++){
for(int j = 0; j < len_b; j++){
ans[i + j] += num_fir[i]*num_sec[j];
if(ans[i + j] >= 10){
ans[i + j + 1] += ans[i + j]/10;
ans[i + j] %= 10;
}
}
}
/*
要考虑需要进位
进位的部分如果非0,
那打印的时候长度应当比原本加1
*/
int sum;
if(ans[len_a + len_b - 1]) sum = len_a + len_b - 1;
else
sum = len_a + len_b - 2;
for(int i = sum; i >= 0; i--){
printf("%d", ans[i]);
}
printf("\n");
return 0;
}