求大数阶乘(10000以内)

//算法一__tanhaiqing
#include <stdio.h> struct Node { int data; Node* next;//指向大数的高位 Node* pre;//指向大数的低位 }; main() { int n,temp,i,wei,jinwei; Node *head,*p1,*p2,*tail; char ch; while(1) { head=new Node;//存放第一个节点,值为1 head->data=1; head->pre=head->next=NULL; printf("Please input a number!"); for(scanf("%d",&n);n<1||n>10001; )//出错处理 { printf("输入有误,请重新输入:\n"); scanf("%d",&n); } for(i=2;i<=n;i++)//从2开始连乘到n { p1=head; jinwei=0; while(1) { temp=i*(p1->data)+jinwei; p1->data=temp%10000;//取个位存下来,如91*2=182,取2存储 jinwei=temp/10000;//十位和百位作为进位,取18为进位 if(p1->next==NULL) break; p1=p1->next; } while(jinwei!=0)//如果乘完一个i发现还有进位,就必须新增结点,由于进位可能是多位数,所以必须用while { p2=new Node; p2->data=jinwei%10000; p2->pre=p1; p1->next=p2; p2->next=NULL; p1=p2; jinwei/=10000; } } wei=0;tail=p1; while(p1)//从最高位到最低位打印 { p2=p1; if(p1==tail) { printf("%d",p1->data); if(p1->data>=1000) wei=wei+4; if(p1->data>=100&&p1->data<1000) wei=wei+3; if(p1->data<100&&p1->data>=10) wei=wei+2; if(p1->data<10) wei++; } else { if(p1->data>=1000) printf("%d",p1->data); if(p1->data>=100&&p1->data<1000) printf("0%d",p1->data); if(p1->data<100&&p1->data>=10) printf("00%d",p1->data); if(p1->data<10) printf("000%d",p1->data); wei=wei+4; } putchar(' '); p1=p1->pre; delete p2; } printf("\n%d",wei); printf("\n是否继续?Y N\n"); getchar(); ch=getchar(); if(ch!='Y'&&ch!='y') break; }; return 0; }

 

//算法二__雨中飞燕
#include<stdio.h>
#define N 1000 //要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()
{
    for(; a<=*s||(++t<=n?(b=0,a=1):0); (*s==a++&&b)?(*s)++:0)
       s[a]=(b+=s[a]*t)%10000,b/=10000;
    for(printf("%d",s[*s]); --*s>0; ) 
        printf(" %04d",s[*s]);
return 0; 
}

 或

#include<stdio.h> 
#define N 1000 //要计算的N
long s[N]={1},n=10000,t=2,a,b,m;
main()
{
   for( ;a<=m||++t<=N&&(a=b=0,1); m==a++&&b&&m++)
         s[a]=(b+=s[a]*t)%n,b/=n;
    for(printf("%d",s[m]);m--;)
        printf(" %04d",s[m]);
}

 运算结果实例:

 

Please input a number!1000
4023 8726 0077 0937 7354 3702 4339 2300 3985 7193 7486 4210 7146 3254 3799 9104
2993 8512 3986 2902 0592 0442 0848 6969 4048 0047 9988 6101 9719 6058 6316 6687
2994 8085 5890 1323 8296 6994 4590 9974 2450 4087 0737 5991 8823 6277 2718 8732
5197 7950 5950 9952 7612 0874 9754 6249 7043 6014 1827 8094 6464 9629 1056 3938
8743 7886 4873 3711 9181 0458 2578 3647 8499 7701 2476 6328 8983 5955 7354 3251
3185 3239 5846 3075 5574 0911 4262 4174 7434 9347 5534 2864 6576 6116 6779 7396
6688 2029 1207 3791 4385 3719 5882 4980 8126 8678 3837 4559 7317 4613 6085 3795
3452 4221 5865 9320 1928 0908 7829 7308 4313 9284 4403 2812 3155 8611 0369 7680
1357 3042 1616 8747 6096 7587 1348 3120 2547 8589 3207 6716 9132 4484 2623 6131
4125 0878 0208 0002 6168 3151 0273 4182 7977 7047 8463 5868 1701 6436 5024 1536
9139 8281 2648 1021 3092 7612 4489 6359 9287 0511 4964 9754 1990 9342 2215 6683
2572 0808 2133 3186 1168 1155 3615 8365 4698 4046 7089 7560 2900 9505 3761 6475
8477 2842 1889 6796 4624 4945 1607 6535 3408 1989 0138 5442 4879 8495 9953 3191
0172 3355 5566 0213 9450 3997 3628 0750 1378 3761 5307 1277 6192 6849 0343 5262
5200 0158 8853 5147 3316 1170 2103 9681 7592 1510 9077 8801 9393 1781 1419 4545
2572 2386 5541 4610 6289 2187 9602 2383 8971 4760 8850 6276 8629 6714 6674 6975
6291 1234 0824 3920 8160 1537 8088 9893 9645 1826 3243 6716 1676 2179 1689 0977
9911 9037 5403 1274 6222 8998 8005 1954 4441 4282 0121 8736 1745 9926 4295 6581
7466 2830 2955 5702 9902 4324 1531 8161 7210 4658 3203 6786 9061 1726 0158 7835
2075 1516 2842 2554 0265 1704 8330 4226 1439 7428 6933 0616 9089 7968 4825 9012
5458 3271 6822 6458 0665 2676 9958 6526 8227 2807 0757 8139 1858 1788 8965 2208
1643 4834 4825 9932 6604 3367 6601 7699 9612 8318 6078 8386 1502 7946 5955 1311
5655 2036 0939 8818 0612 1385 5860 0301 4356 9452 7224 2063 4463 1797 4605 9468
2573 1037 9008 4024 4324 3846 5657 2450 1440 2821 8852 5247 0935 1906 2092 9023
1364 9327 3497 5655 1395 8720 5596 5422 8749 7740 1141 3346 9627 1542 2845 8623
7738 7538 2304 8386 5688 9764 6192 7383 8149 0014 0767 3104 4664 0259 8994 9022
2221 7659 0433 9901 8860 1856 6526 4850 6179 9702 3561 9389 7017 8600 4081 1889
7299 1831 1021 1712 2984 5901 6419 2106 8884 3871 2185 5646 1249 6079 8722 9085
1929 6819 3723 8864 2614 8396 5738 2291 1231 2502 4186 6493 5314 3970 1374 2853
1926 6498 7533 7218 9406 9428 1434 1185 2015 8014 1233 4482 8015 0513 9969 4290
1534 8307 7644 5690 9907 3152 4332 7828 8269 8646 0278 9864 3211 3908 3506 2170
9500 2597 3898 6355 4277 1967 4282 2248 7575 8676 5752 3442 2020 7573 6305 6949
8825 0879 6892 8162 7538 4886 3396 9099 5982 6280 9561 2145 0994 8717 0124 4516
4612 6037 9029 3091 2088 9086 9420 2851 0640 1821 5439 9457 1568 0594 1872 7489
9809 4254 7421 7358 2401 0636 7740 4595 7417 8516 0829 2301 3535 8081 8400 9699
6372 5242 3056 0855 9037 0062 4271 2434 1690 9004 1536 9010 5933 9838 3577 7939
4109 7002 7753 4720 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000
2568
是否继续?Y N

 

 

 

 

 

posted on 2014-03-15 13:00  IThinktan  阅读(2014)  评论(0编辑  收藏  举报

导航