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毫秒