压4位。
以下是我的代码:
#include<stdio.h>
#include<string.h>
#define maxlen 10010
typedef unsigned long Long;
typedef struct
{
Long len,s[10000];
}high;
char s1[maxlen],s2[maxlen];
high a,b,c;
Long num(char s[],Long begin,Long end)
{
long i,re=0;
i=begin;
while(i<end)
{
re+=s[i]-'0';
re*=10;
i++;
}
re+=s[end]-'0';
return re;
}
void init()
{
long i,l1,l2;
a.len=0;
b.len=0;
c.len=0;
for(i=0;i<10000;i++)
{
a.s[i]=0;
b.s[i]=0;
c.s[i]=0;
}
scanf("%s%s",s1,s2);
l1=strlen(s1)-1;
l2=strlen(s2)-1;
for(i=l1;i>=0;i-=4)
{
a.s[a.len]=num(s1,(i-3>0?i-3:0),i);
a.len++;
}
for(i=l2;i>=0;i-=4)
{
b.s[b.len]=num(s2,(i-3>0?i-3:0),i);
b.len++;
}
}
void mul()
{
long i,j;
for(i=0;i<a.len;i++)
for(j=0;j<b.len;j++)
{
c.s[i+j]+=a.s[i]*b.s[j];
if(c.s[i+j]>=10000)
{
c.s[i+j+1]+=c.s[i+j]/10000;
c.s[i+j]%=10000;
}
}
for(i=a.len+b.len;i>=0;i--)
if(c.s[i]!=0)
break;
c.len=i+1;
}
void write()
{
long i;
printf("%ld",c.s[c.len-1]);
for(i=c.len-2;i>=0;i--)
{
if(c.s[i]<1000) printf("0");
if(c.s[i]<100) printf("0");
if(c.s[i]<10) printf("0");
printf("%ld",c.s[i]);
}
putchar('\n');
}
int main()
{
init();
mul();
write();
return 0;
}
posted on 2010-01-06 19:59
lee1r 阅读(329)
评论(1) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟