hdu4207(两大数相乘 并输出过程)
发布时间:2020-12-14 04:11:50 所属栏目:大数据 来源:网络整理
导读:#includestdio.h#includestring.hint main(){ __int64 a,b; intm[100][100],i,j,max,a1[8],b1[8],k,t=1; while(scanf("%I64d%I64d",a,b)==2(a||b)) { memset(m,sizeof(m));//注意每次都要清零 memset(a1,sizeof(a1)); memset(b1,sizeof(b1)); i=0;j=0; print
#include<stdio.h> #include<string.h> int main() { __int64 a,b; intm[100][100],i,j,max,a1[8],b1[8],k,t=1; while(scanf("%I64d%I64d",&a,&b)==2&&(a||b)) { memset(m,sizeof(m));//注意每次都要清零 memset(a1,sizeof(a1)); memset(b1,sizeof(b1)); i=0;j=0; printf("Problem %d",t); printf("n"); t++; while(a||b)//拆分a和b { if(a) { a1[i++]=a%10;a/=10; } if(b) { b1[j++]=b%10;b/=10; } } max=k=0; int i1,j1,c,len[100]; for(j1=0;j1<j;j1++)//计算每一个相乘的值,并用二维数组 m 装数值 { c=0;max=j1; for(i1=0;i1<=i;i1++)//要注意等号i1<=i { if(i1<i) { m[k][max]=a1[i1]*b1[j1]+c; c=m[k][max]/10; m[k][max]%=10; max++; } else { m[k][max]=c;if(c)max++; } } k++; } c=0; for(i1=0;i1<max;i1++)//计算最终的结果数值 { m[k][i1]=c; for(j1=0;j1<k;j1++) m[k][i1]+=m[j1][i1]; c=m[k][i1]/10; m[k][i1]%=10; } if(c) {m[k][max]+=c;max++;} int flag=0; //输出 for(i1=max-1;i1>=0;i1--)//输出a的值 if((a1[i1]||flag)&&i1<i) {printf("%d",a1[i1]);flag=1;} else printf(" "); printf("n"); flag=0; for(i1=max-1;i1>=0;i1--)//输出b的值 if((b1[i1]||flag)&&i1<j) { printf("%d",b1[i1]);flag=1; } else printf(" "); printf("n"); for(i1=max-1;i1>=0;i1--)//输出隔开符 printf("-"); printf("n"); int flog=0,e=0,flg=0,v=0; //输出中间的每一行值 for(i1=0;i1<k;i1++) { flag=0;flog=0; for(j1=max-1;j1>=0;j1--)//判断m[i1]中的值是否全为零, if(m[i1][j1]) { flg=1;break; } if(flg)//m[i1]里面的数值不全为零,则输出m[i1]的值,否则不输出 { for(j1=max-1;j1>=0;j1--) if((m[i1][j1]||flag)&&j1>=i1-e)//j1>=i1-e为了不多输出零,e 是代表m[i1]的上面行全为零的个数 { printf("%d",m[i1][j1]);flag=1;flog=1;//flag是控制数值中间的零输出,flog是换行开关(有值输出则换行,否则不换行) } elseif(j1<i1) //小于i1以后的多余的零不用输出来 flag=0; else printf(" "); v++; //记绿输出的次数 } flg=0; if(flog)//有输出值,则换行,并令e=0 { printf("n");e=0; } else e++;//表明m[i1]里面的值全为0,则e加1; } if(v!=1)//如果v =1表明不必再输出一次 { for(j1=max-1;j1>=0;j1--) printf("-"); printf("n"); for(j1=max-1;j1>=0;j1--) printf("%d",m[k][j1]); printf("n"); } } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |