两个数都不会超过六位数 所以可以直接用64位int 不会溢出
只要注意输出格式 就好了
#include<iostream>
#include<string.h>using namespace std;__int64 a;int max1;int count(__int64 x){ int t=0; while(x) { x/=10; t++; } return t;}void solve(int temp,int c,int p){ __int64 v,i,ans; if(c==-1) { c=0; ans=temp; v=count(temp); } else { ans=temp*a; v=count(ans); } for(i=max1-v-c;i>0;i--) printf(" "); printf("%I64d",ans); while(p--) printf("0"); printf("\n");}int main()
{ int i,j,temp,c,u=1; __int64 ans,b,t; while(scanf("%I64d%I64d",&a,&b)) { if(a==0&&b==0) break; printf("Problem %d\n",u++); t=b;c=0; max1=count(a*b); solve(a,-1,0); solve(b,-1,0); for(i=0;i<max1;i++) printf("-"); printf("\n"); int p=0; int m=0; while(t) { temp=t%10; if(temp) { m++; solve(temp,c,p); p=0; } else p++; t/=10; c++; } if(m==1) continue; for(i=0;i<max1;i++) printf("-"); printf("\n"); printf("%I64d\n",a*b); } return 0;}