c/c++大整数乘法

作者: harvey_dong | 来源:发表于2017-06-03 17:07 被阅读21次

Description

求两个不超过200位的非负整数的积。

Input

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

Output

一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

Sample Input

12345678900

98765432100

Sample Output

1219326311126352690000

代码:

#include<stdio.h>

#include<string.h>

int main(int argc, char *argv[])

{

int a[200],b[200],c[400]={0},i,j,m,l,k,t,h;

char aa[200],bb[200];

scanf("%s%s",&aa,&bb);

l=strlen(aa);

t=strlen(bb);

for(m=0,j=l-1;j>=0;j--,m++)

a[m]=aa[j]-'0';

for(m=0,j=t-1;j>=0;j--,m++)

b[m]=bb[j]-'0';

//上面的处理和大整数加法一样!这里就不多说了!

for(i=0;i<l;i++)

    for(j=0;j<t;j++)

        c[i+j]+=a[i]*b[j];        //理解这里是关键!

//同样这里是把超过10的进位!!

for(i=0;i<l+t;i++)

if(c[i]>=10)

{

c[i+1]=c[i+1]+c[i]/10;

c[i]%=10;

}

for(i=l+t-1;i>=0;i--)

if(c[i]==0)continue;

//上面是把有前导0的数去掉!

else {k=i;break;}

if(i == -1)printf("0");

for(i=k;i>=0;i--)

printf("%d",c[i]);

printf("\n");

return 0;

}

相关文章

  • c/c++大整数乘法

    Description 求两个不超过200位的非负整数的积。 Input 有两行,每行是一个不超过200位的非负整...

  • c/c++大整数加法

    刚入门编程语言的同学可能对大整数加法合乘法有点小头疼。在这里就给大家分享下。希望对大家有所帮助。下面进入正题 De...

  • 大整数乘法

    模拟乘法累加 - 改进 例如:计算98×21,步骤如下 这里唯一要注意的便是进位问题,我们可以先不考虑进位,当所有...

  • 大整数减法——C++实现

  • 2980大整数乘法

    一次就ac了, 开心

  • 大整数的乘法

    将n位二进制整数X和Y都分为2段,每段的长为n/2位(为叙述简单,假设n是2的幂) 由此, 这样,X和Y的乘积为 ...

  • 分治法 Divide and Conquer

    解决的最轻,最重,矩阵乘法,大整数乘法以及排序(快速排序,归并算法)。快速傅立叶变换,Karatsuba乘法算法 ...

  • All for PAT秋考 | 1136 - 1139

    涉及知识1136 大整数加法(字符串,这次用了c++ string)1137 筛选分类排序,取整注意+0.5113...

  • 大整数乘法(.net代码)

    今天部门面试一个人,面试官给来面试的人除了一道题:大整数乘法;面试结果弄得我们术面试官有点怀疑人生了,顺手就抓...

  • 0024-大整数乘法

    问题描述 求两个不超过 200 位的非负整数的积。 输入 有两行,每行是一个不超过 200 位的非负整数,没有多余...

网友评论

    本文标题:c/c++大整数乘法

    本文链接:https://www.haomeiwen.com/subject/wllmfxtx.html