PersonalCorpus 版 (精华区)

寄信人: ooze (烂泥)
标  题: 623
发信站: 哈工大紫丁香 (2002年03月08日21:59:20 星期五)
来  源: mtlab4.hit.edu.cn 

773531 2002/03/08 13:58:48.302 Accepted 0:00.030 64
Bozhang ,HIT,P.R.China ... C++ 623 - 500!


struct LongInteger{
            int n[500],len;
        };
void setlengthLI(struct LongInteger *a, int v)
{   a->len=v;    }
void setvalueLI(struct LongInteger *a, int pos, int v)
{    a->n[pos]=v; }
void copyLI(struct LongInteger *des,struct LongInteger *src)
{
    for (int i=0;i<src->len;i++) des->n[i]=src->n[i];
    des->len=src->len;
}
void plusLI(struct LongInteger *des,struct LongInteger *src1,struct LongInte
ger *src2)
{
    int i=0,k=0;
    while ((i<=src1->len)||(i<=src2->len)) {
        if (i<=src1->len) des->n[i]=src1->n[i]; else des->n[i]=0;
        if (i<=src2->len) des->n[i]+=src2->n[i];
        des->n[i]+=k;
        k=des->n[i]/10000;
        des->n[i]%=10000;
        i++;
    }
    if (k!=0) { des->n[i]=k; des->len=i; } else des->len=i-1;
}
void mulLI(struct LongInteger *des,int u)
{
    if (u==0) { setlengthLI(des,-1); return; }
    if (u==1) return;
    int i=0,k=0;
    while (i<=des->len) {
        des->n[i]*=u;
        des->n[i]+=k;
        k=des->n[i]/10000;
        des->n[i]%=10000;
        i++;
    }
    if (k!=0) { des->n[i]=k; des->len=i; } else des->len=i-1;
}
void mulLI2(struct LongInteger *des,struct LongInteger *src1, struct LongInt
eger *src2)
{
    struct LongInteger t;
    setlengthLI(des,-1);
    for (int i=src1->len;i>=0;i--) {
        mulLI(des,10000);
        copyLI(&t,src2);
        mulLI(&t,src1->n[i]);
        plusLI(des,des,&t);
    }
}
void printLI(struct LongInteger *des)
{
    printf("%d",des->n[des->len]);
    for (int i=des->len-1; i>=0; i--) {
        if (des->n[i]<1000) printf("0");
        if (des->n[i]<100) printf("0");
        if (des->n[i]<10) printf("0");
        printf("%d",des->n[i]);
    }
}
void sprintLI(struct LongInteger *des,char *res)
{
    int j;
    sprintf(res,"%d",des->n[des->len]); j=strlen(res);
    for (int i=des->len-1; i>=0; i--) {
        if (des->n[i]<1000) { sprintf(res+j,"0"); j++; }
        if (des->n[i]<100) { sprintf(res+j,"0"); j++; }
        if (des->n[i]<10) { sprintf(res+j,"0"); j++; }
        sprintf(res+j,"%d",des->n[i]); j=strlen(res);
    }
}
void main()
{
    int i,j;
    char output[1500];
    struct LongInteger res;
    while (scanf("%d\n",&i)==1) {
        setlengthLI(&res,0);
        setvalueLI(&res,0,1);
        for (j=2;j<=i;j++) mulLI(&res,j);
        printf("%d!\n",i);
        sprintLI(&res,output);
//        i=0; j=strlen(output);
  //      while(i<j) {
    //        printf("%c",output[i]); if (i%80==79) printf("\n");i++;
      //  }
       // if (i%80!=0) printf("\n");
       printf("%s\n",output);
    }
}

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: mtlab4.hit.edu.cn]
--
※ 转寄:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: mtlab4.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.326毫秒