试题1:大数相乘

试题描述:
有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
解题思路:
模拟乘法的运算过程,利用一个数组作为结果的中间转换,然后再将数组转换为字符串

C语言解法:

#include 
#include 
#include 

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

Python解法:

line = raw_input().split()
x1 = int(line[0])
x2 = int(line[1])
print(x1*x2)

你可能感兴趣的:(试题1:大数相乘)