Problem 1: 高精度乘法
Time Limit:1 Ms| Memory Limit:128 MB
Difficulty:15
Description
运算两个高精度数相乘的积(1<=两个数的位数<=1000)
Input
输入 两个数
Output
乘积结果
Sample Input
987654321 123456789
Sample Output
121932631112635269
Hint
只有一组测试数据,进行多次测试
代码
#include<stdio.h>
#include<string.h>
#define MAXSIZE 1000
char m[MAXSIZE], n[MAXSIZE];
int m_1[MAXSIZE], n_1[MAXSIZE];
int s[MAXSIZE * MAXSIZE];
int main()
{
int dig, k = 0 , t;
int lenm, lenn, i, j;
scanf("%s%s", n, m);
lenm = strlen(m);
lenn = strlen(n);
for(i = 0; i < lenm; i++)
m_1[i] = m[i] - 48;
for(i = 0; i < lenn; i++)
n_1[i] = n[i] - 48;
for(j = lenm - 1; j >= 0; j--) //先将各个数相乘所得结果保存在数组中
{
t = k;
for(i = lenn - 1; i >= 0; i--)
{
s[t] += m_1[j] * n_1[i];
t++;
}
++k;
dig = t;
}
for(i = 0; i < dig; i++)
while(s[i] >= 10)
{
s[i] -= 10;
s[i + 1] += 1;
}
if(s[dig] != 0)
{
for(i = dig; i >= 0; i--)
printf("%d", s[i]);
printf("\n");
}
else
{
for(i = dig - 1; i >= 0; i--)
printf("%d", s[i]);
printf("\n");
}
return 0;
}