算法数据结构和算法分析

c/c++大整数乘法

2017-06-03  本文已影响21人  harvey_dong

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;

}

上一篇 下一篇

猜你喜欢

热点阅读