P1303 A*B Problem
题目描述
求两数的积。
输入格式
两行,两个数。
输出格式
积
输入输出样例
输入 #1 复制
1
2
输出 #1 复制
2
说明/提示
每个数字不超过10^2000,需用高精
思路: 模仿竖式乘法
题解如下
//大数乘法
#include<iostream>
#include<string.h>
using namespace std;
const int Max = 10000;
int a[Max]; //a,b数组逆序存数
int b[Max];
int res[Max];
int len(int a[])
{
int i;
for(i = Max - 10; i > 0; i --)
{
if(a[i])
break;
}
return i;
}
//大数乘核心
void multiplay(int a[] , int b[])
{
int len_a = len(a);
int len_b = len(b);
//模仿竖式乘法
for(int i = 0; i <= len_a; i ++)
for(int j = 0; j <= len_b; j ++)
res[i + j] += a[i] * b[j];
for(int i = 0; i <= len_a + len_b + 1; i ++)
{
res[i + 1] += res[i] / 10;
res[i] %= 10;
}
}
int main()
{
char m[Max],n[Max];
scanf("%s %s",m,n);
//转存待处理char数组
int len_m = (int)strlen(m),len_n = (int)strlen(n);
int pos_a = 0,pos_b = 0;
for(int i = len_m - 1; i >= 0; i --)
a[pos_a ++] = m[i] - '0';
for(int i = len_n - 1; i >= 0; i --)
b[pos_b ++] = n[i] - '0';
multiplay(a, b);
//输出结果
for(int i = len(res); i >= 0; i --)
{
putchar((char)res[i] + '0');
}
printf("\n");
return 0;
}