题目地址:点击打开链接
C++代码:
#include <cstdio>
#include <cstring>
const int maxnum=100000;
char s1[1000],s2[1000],ans[maxnum],temps[maxnum];
void add(char s[])
{
int len_min=strlen(s)>strlen(ans)?strlen(ans):strlen(s);
int len_max=strlen(s)<strlen(ans)?strlen(ans):strlen(s);
int i;
int c=0;
for(i=0;i<len_min;++i)
{
int a=s[i]-'0'+ans[i]-'0'+c;
ans[i]=a%10+'0';
c=a/10;
}
for(i=len_min;i<len_max;++i)
{
int a=s[i]+ans[i]-'0'+c;
ans[i]=a%10+'0';
c=a/10;
}
if(c!=0)
ans[i]=c+'0';
}
void multi(char s1[],int x,int n)
{
memset(temps,0,sizeof(temps));
int c=0;
int i;
int len=strlen(s1);
for(i=0;i<len;++i)
{
int a=(s1[i]-'0')*x+c;
temps[i]=a%10+'0';
c=a/10;
}
if(c!=0)
temps[len++]=c+'0';
for(i=len-1;i>=0;--i)
temps[i+n]=temps[i];
for(i=0;i<n;++i)
temps[i]='0';
add(temps);
}
int main()
{
while(scanf("%s",s1)!=EOF)
{
memset(ans,0,sizeof(ans));
scanf("%s",s2);
int i,j;
for(i=0,j=strlen(s1)-1;i<j;++i,--j)
{
char c=s1[i];
s1[i]=s1[j];
s1[j]=c;
}
for(i=0,j=strlen(s2)-1;i<j;++i,--j)
{
char c=s2[i];
s2[i]=s2[j];
s2[j]=c;
}
for(i=0;i<(int)strlen(s2);++i)
multi(s1,s2[i]-'0',i);
for(i=maxnum-1;i>=0&&(ans[i]==0||ans[i]=='0');--i);
if(i<0)
printf("0\n");
else
{
for(;i>=0;--i)
printf("%c",ans[i]);
printf("\n");
}
}
return 0;
}