大整数阶乘的计算

简介: 1 #include 2 3 #define mo 10000 4 int ans[1000001]; 5 //这里高精度整数存储格式是:ans[0]存储位数,低位在前,高位在后,每一个ans[i]存储四位整数 6 7 void mul(int *,int); ...
 1 #include <stdio.h>
 2 
 3 #define mo 10000
 4 int ans[1000001];
 5 //这里高精度整数存储格式是:ans[0]存储位数,低位在前,高位在后,每一个ans[i]存储四位整数
 6 
 7 void mul(int *,int);
 8 void print_arr(int *);
 9 void fact(int n);
10 
11 int main()
12 {
13     int n,i;
14     scanf("%d",&n);
15     printf("%d!=",n);
16     fact(n);
17     print_arr(ans);/**/
18 
19     /*ans[0]=1;
20     ans[1]=1000;
21     n=15;
22     mul(ans,n);
23     print_arr(ans);
24     for(i=0;i<=ans[0];i++) printf("%d ",ans[i]);*/
25 
26     return 0;
27 }
28 void mul(int * a,int c)
29 {
30     int i,x=0;
31     for (i=1;i<=a[0];i++)
32     {
33         a[i]=a[i]*c+x;
34         x=a[i]/mo;  //进位
35         a[i]=a[i]%mo;
36     }
37     while(x>0)      //向更高位进位
38     {
39         a[++a[0]]=x%mo;
40         x=x/mo;
41     }
42 }
43 
44 void print_arr(int * a)
45 {
46     int i;
47 
48     //单独输出高位。避免在循环体内用%04d的格式输出从而产生无意义的前缀0。
49     printf("%d",a[a[0]]);
50 
51     for (i=a[0]-1;i>0;i--)
52         printf("%04d",a[i]);
53     putchar('\n');
54 }
55 
56 void fact(int n)
57 {
58     if (n==1)
59     {
60         ans[0]=1;
61         ans[1]=1;
62         return ;
63     }
64     fact(n-1);   //先求(n-1)的阶乘
65     mul(ans,n);  //然后求n的阶乘
66 }

 

相关文章
|
2月前
通过最大公约数计算
【10月更文挑战第20天】通过最大公约数计算。
36 5
|
存储 C++
大整数运算(高精度运算)C/C++
大整数运算(高精度运算)C/C++
276 0
|
算法 Python
计算阶乘之和
计算阶乘之和
107 0
|
算法
不使用+或-运算符,计算两数之和
不使用+或-运算符,计算两数之和
87 0
|
算法 程序员 C语言
C语言基础(有关三个数比较大小、冒泡排序、最大公约数、和有关某个数x的绝对值的n次方除于n的阶乘问题的函数求解法;和阶乘函数递归方法;和数组作函数参数的
C语言基础(有关三个数比较大小、冒泡排序、最大公约数、和有关某个数x的绝对值的n次方除于n的阶乘问题的函数求解法;和阶乘函数递归方法;和数组作函数参数的
|
C++
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
123 0
计算n个阶乘之和
方法一: 错误情况截图: 正确情况截图: 方法二: 运行代码: 运行结果截图:
64 0
计算n个阶乘之和
|
算法 测试技术 C++
基于C++实现的大整数计算
基于C++实现的大整数计算
160 0
基于C++实现的大整数计算
11:计算浮点数相除的余数
11:计算浮点数相除的余数
299 0
20:计算2的幂
20:计算2的幂
138 0