阶乘的精确值!

原创 2013年12月02日 21:57:28
1000! 约等于 4*10e2567
所以说,是无法用甚至double long来存储。
这里可以用一个长度为3000的数组来存储,一个存一位,轻松存储。
数组的[0]存最低位,大数的存开头,因为这样可以避免进位时出错(如果[0]存高位就无法进位了)。
#include<stdio.h>
#include<string.h>

int main() {
	int i,j,n;
	int maxn = 3000;
	int f[maxn];
	while (scanf("%d", &n) != EOF) {
		memset(f, 0, sizeof(f));        //初始化为0
		f[0] = 1;						//0和1的阶乘都是1
		for (i = 2; i <= n; i++) {
			int carry = 0;
			for (j = 0; j < maxn; j++) { //按照人的思维来计算(手算的形式)
				int s = f[j] * i + carry;
				f[j] = s % 10;			//本位数
				carry = s / 10;         //进位
			}
		}
		for (j = maxn-1; j >= 0; j--)   //忽略前面的0
			if (f[j])
				break;
		for (i = j; i >= 0; i--)		//从头开始输出
			printf("%d", f[i]);
		printf("\n****************\n");
	}
	return 0;
}


相关文章推荐

1000阶乘精确值

  • 2016年03月27日 14:45
  • 574B
  • 下载

【算法竞赛入门经典】阶乘的精确值

【算法竞赛入门经典】阶乘的精确值问题描述输入不超过1000的正整数n,输出n! = 1x2x3x4x···xn的精确结果. 样例输入:5 样例输出:120 算法分析我们需要解决两个问题: 怎么保...

阶乘的精确值(大数)

首先确定阶乘的位数。 我们知道整数n的位数的计算方法为:log10(n)+1 故n!的位数为log10(n!)+1   如果要求出n!的具体值,对很大的n(例如n=1000000)...

求n的阶乘的精确值

斯特林公式可以求出n!的近似值,但是如果需要求精确值的话,就要采取另外的办法了。‘ 当n #include #include #define N 3000 int f[N];//保存阶乘的位数 i...

阶乘的精确值

例如输入不超过1000的正整数n,输出n!=1X2X3...Xn的精确结果。例如输入30输出 26525285981219058636308480000000 当输入1000时1000的阶乘约4*10...

阶乘的精确值(借鉴白书)

输入不超过1000的正整数n,输出n的阶乘的精确结果 样例输入:30 样例输出:265252859812191058636308480000000 分析: 为了保存结果,需要分析1000!有多...
  • YJX_xx
  • YJX_xx
  • 2014年06月20日 18:52
  • 559

基础题目选解_高精度运算(小学生算数,阶乘的精确值,高精度运算类bign)

高精度运算小学生算数#include 、 int main() { int a,b; while(scanf(“%d%d”,&a,&b)!=EOF){ ...

大数精确阶乘运算

  • 2013年05月07日 22:47
  • 1KB
  • 下载

精确计算N的阶乘

  • 2014年10月27日 13:40
  • 926B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:阶乘的精确值!
举报原因:
原因补充:

(最多只允许输入30个字)