计算阶乘计算到一定程度往往会超出范围
对于unsigned int ,四个字节,有32位,最大的数是 2 ^ 32 = 4,294,967,296; 然而 13! = 6,227,020,800 ;显然超出范围;
对于8个字节 long long 来说 ,2 ^ 64 = 18,446,744,073,709,551,616; 而 21! = 51,090,942,171,709,440,000 ; 显然也超出了范围.所以僬侥找方法解决这一问题,让能计算的范围更大.
考虑到这一问题,我们可以用数组来存储每一位数字,然后逐个输出.
#include <stdio.h> #define N 10000 // 这里数字根据个人情况 void Print_Factorial ( const int N ); int main() { int N; printf("输入你想计算的阶乘数: "); scanf("%d", &N); Print_Factorial(N); return 0; } void Print_Factorial ( const int N ) { int num[N] = { 0 }; //当然这里你也可以用char类型数组,只要你转化啥没问题,为了省一点空间 int i = 0; int j = 0; int l = 0 ; //统计数字位数 int carry = 0; // 进位 int s = 0; num[0] = 1; // 0! = 1 ; 个位初始为1; if (N < 0) { printf("Invalid input"); } else { for(i = 2 ; i <= N ; i++) { for (j = 0 ; j <= l ; j++) { s = num[j] * i + carry ; num[j] = s % 10 ; carry = s / 10 ; } while (carry) { num[j++] = carry % 10; carry /= 10; l++; } } printf("%d! = ",N) ; while (l >= 0) { printf("%d",num[l]); l--; } } }
而,用数组存储的一大问题就是进位问题,只要解决好进位,写好这一步,输出的问题就自然不大;
标签:变量,int,Factorial,过大,Print,num,printf,阶乘 From: https://www.cnblogs.com/Code-wangg/p/17028476.html