大数乘法
发布时间:2020-12-14 02:59:17 所属栏目:大数据 来源:网络整理
导读:描述 求两个不超过200位的非负整数的积。 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 12345678900 4576098765432100 638556
求两个不超过200位的非负整数的积。 12345678900 45760 98765432100 6385561 1219326311126352690000 ? ? ?292203271360
#include<stdio.h> #include<string.h> int main() { char a[1000],b[1000]; int s[10010],i; int l1,l2,j; while(scanf("%s",a)!=EOF) { scanf("%s",&b); if(strcmp(a,"0")==0 || strcmp(b,"0")==0) printf("0n");//当两个数中,有一个是0就直接输出0; else { l1=strlen(a); l2=strlen(b); for(i=0;i<l1+l2;i++) s[i]=0; for(i=0;i<l1;i++) { for(j=0;j<l2;j++) s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); } for(i=l1+l2-1;i>=0;i--) { if(s[i]>=10) { s[i-1]+=s[i]/10; s[i]=s[i]%10; } } int t=0; for(i=0;i<l1+l2;i++) { if(t==0 && s[i]==0) { t++; continue; } t++;//处理前导0; printf("%d",s[i]); } printf("n"); } } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |