vijos P1040 高精度乘法

vijos P1040 高精度乘法
压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;
}

你可能感兴趣的:(vijos P1040 高精度乘法)