试题1:大数相乘

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

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)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 8,145评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,862评论 0 4
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,814评论 0 1
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-code.h...
    eddy_wiki阅读 13,080评论 0 30
  • 毕业考结束了,我退出了所教的三个班。为了不必要的联系。 可是,有时候有些猝不及防来得总是不会让我觉得很自在。 其实...
    我和遥遥阅读 1,859评论 0 4

友情链接更多精彩内容