试题描述:
有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
解题思路:
模拟乘法的运算过程,利用一个数组作为结果的中间转换,然后再将数组转换为字符串
C语言解法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void muti2(char *p1, char *p2)
{
int n = strlen(p1);
int m = strlen(p2);
int i = 0, j = 0;
int *p3 = (int *) malloc(sizeof(int) * (n + m )); //技巧一:申请堆空间
char *p4 = (char *) malloc(sizeof(char) * (n + m + 1));
memset(p3, 0, sizeof(int) * (n + m)); //清零初始化
for(i=m-1;i>=0;i--)
{
for(j=n-1;j>=0;j--)
{
p3[i+j+1] += (p1[j]-'0') * (p2[i]-'0');
}
}
for(i=n+m-1;i>=0;i--)
{
if(p3[i]>=10)
{
p3[i-1] += p3[i] / 10;
p3[i] = p3[i] % 10;
}
}
i = 0;
while(p3[i]==0)//排除第一项为零的情况
{
i++;
}
j = 0;
for(; i<n+m&&j<m+n; i++,j++)
{
p4[j] = p3[i] + '0';
}
p4[j] = '\0';
printf("%s", p4);
free(p3);
free(p4);
}
int main()
{
char a[100] = {0}, b[100] = {0};
scanf("%s%s", a, b);
muti2(a, b);
return 0;
}
Python解法:
line = raw_input().split()
x1 = int(line[0])
x2 = int(line[1])
print(x1*x2)