c/c++大整数乘法

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语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 6,506评论 1 42
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,963评论 0 2
  • 中秋快乐 好像没什么,还是一样的过日子,再孤独,内心一片海,生活也不会荒芜。 少一些热闹,多一些平静,日子也照过。
    陈小胖啊阅读 150评论 0 0
  • 爸爸,我们又要交钱啦,360元。文心小声说。 哦,没事,爸爸一定给你准备好。 总是不断地交钱。妈妈埋怨。 爸爸说:...
    夏花静秋阅读 349评论 2 1