题目描述
求两数的积。
输入输出格式
输入格式:两行,两个数。
输出格式:积
输入输出样例
说明
每个数字不超过10^2000,需用高精
思路;模拟计算 最后处理进位即可
#include <bits/stdc++.h>
#include <memory.h>
#define N 3000
using namespace std;
int main()
{
int a[N], b[N], sum[N];
string tmp_a, tmp_b;
cin >> tmp_a >> tmp_b;
if(tmp_a[0] == '0' || tmp_b[0] == '0')
{
cout<<0;
return 0;
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(sum,0,sizeof(sum));
for(int i = N-tmp_a.length(),j=0; i<N; i++)//转化
a[i] = tmp_a[j++]-'0';
for(int i = N-tmp_b.length(),j=0; i<N; i++)//转化
b[i] = tmp_b[j++]-'0';
for(int i = N-1; i>=N-tmp_a.length(); i--)//模拟计算
{
int star = i;
for(int j = N-1; j>=N-tmp_b.length(); j--)
{
sum[star--] += a[i]*b[j];
}
}
int k = 0;
for(int i = N-1; i>=N-(tmp_a.length()+tmp_b.length()); i--)//处理进位
{
sum[i] += k;
k = sum[i]/10;
sum[i] %= 10;
}
int flag = 0;
for(int i = 0; i<N; i++)//输出
{
if(sum[i] != 0 && flag == 0)
flag = 1;
if(flag)
cout<<sum[i];
}
return 0;
}