题目描述
这道题很简单,只需要计算a*b即可,唯一有点麻烦的就是a和b的长度可能有点长,什么int啊,long long啊,double啊都可能从不下,怎么办?启明星软件组组长给了我一堆数据让我帮他计算结果,你们谁来帮帮我。。。
输入
输入有多组数据。
对于每组测试数据,在一行中给出两个整数a,b(a,b的位数小于等于1000),中间用一个空格隔开。
保证输入没有前导0;
当读到文件结尾时输入结束
输出
对于每组输入,在一行中输出两个整数相乘的结果(注意输出格式控制)。
样例输入
123456 789
123456789 123456
123456 123456789
1234567891234567891234567984489413 3254698745621556461151
样例输出
97406784
15241481342784
15241481342784
4018146566985798265744855610651282705766247201905294363
(个人认为这个考虑的情况比较多,首先应判断两个数有没有为零,然后判断两个数之前有没有负号,如果有负号,则不考虑负号将字符串倒置转换成数字类型放入一个数组中,然后将两个数组的每一位对应相乘,进位与之前的高精度加法一样,最后输出的时候的将数组前面的零去掉然后带上符号输出结果即可)
#include<stdio.h>
#include<string.h>int main() {
char n[1000],m[1000];
int a[1000],b[1000];
while (scanf("%s%s",n,m) != EOF) {
int n1,m1;
int i,j;
int k1,k2;
int c[2000] = {0};
n1 = strlen (n);
m1 = strlen (m);
if ((n1 == 1 && n[0] == '0') || (m1 == 1 && m[0] == '0')) {
printf("0\n");
}
else {
if (n[0] == '-') {
k1 = -1;
for (i = 0,j = n1-1; i < n1-1; i++,j--)
a[i] = n[j]-'0';
n1--;
}
else {
k1 = 1;
for (i = 0,j = n1-1; i < n1; i++,j--)
a[i] = n[j]-'0';
}
if (m[0] == '-') {
k2 = -1;
for (i = 0,j = m1-1; i < m1-1; i++,j--)
b[i] = m[j]-'0';
m1--;
}
else {
k2 = 1;
for (i = 0,j = m1-1; i < m1; i++,j--)
b[i] = m[j]-'0';
}
for (i = 0; i < n1; i++)
for (j = 0; j< m1;j++)
c[i+j] += a[i]*b[j];
for (i = 0; i< n1+m1; i++) {
if (c[i] >= 10) {
c[i+1] += c[i]/10;
c[i] %= 10;
}
}
j = 1999;
while (!c[j])
j--;
if (k1*k2 == -1)
printf("-");
for (i = j; i >= 0; i--)
printf("%d",c[i]);
printf("\n");
}
}
return 0;
}