POJ1423 Big Number 【求N的阶乘的位数】

Big Number

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 26151   Accepted: 8349

Description

In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of digits in the factorial of
the number.

Input

Input consists of several lines of integer numbers. The first line contains an integer n, which is the number of cases to be tested, followed by n lines, one integer 1 <= m <= 10^7 on each line.

Output

The output contains the number of digits in the factorial of the integers appearing in the input.

Sample Input

2
10
20

Sample Output

7
19

Source

Dhaka 2002

#include <stdio.h>
#include <math.h>

const double PI = acos(-1.0);
const double E = exp(1.0);

int main() {
	int t, n;
	scanf("%d", &t);
	while(t--) {
		scanf("%d", &n);
		printf("%d\n", (int)(log10(2*PI*n)/2+n*log10(n/E))+1);
	}
    return 0;
}
时间: 2024-10-05 11:09:23

POJ1423 Big Number 【求N的阶乘的位数】的相关文章

求一个数阶乘后位数问题

问题:In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of digits in the fa

求一个数阶乘的位数

flyfish 2015-8-15 例如 7!=5040 ,7的阶乘结果是4位数(10进制) 求一个数的位数 1 循环方法 int get_digit_loop(int N) { int digit = 0; do { digit ++; } while ((N /= 10) > 0); return digit; } 2 递归方式 int get_digit_recursion(int N) { int digit = 0; digit = N < 10 ? 1 : 1 + get_digi

汇编语言-求X的阶乘

1. 题目:求X的阶乘值 2. 要求:输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现. 3. 提示:可以用递归来实现,也可以用简单的循环来实现. 这里使用循环来实现: 对于汇编新手,最好通过高级语言的编程测试,然后再写汇编代码,这样效果会好一些. 求阶乘的C++代码如下: 1 //The program is to find the factorial from 1 to 10 2 //author:Karllen 3 //Date: 05/21/2014 4 5

求n的阶乘以及前n个数的阶乘和

//求n的阶乘 #include<stdio.h> #include<stdlib.h> int main() { int n = 0; int sum = 1; scanf( "%d", &n); while (n)                             //n如果为零,则不进入循环体,输出的sum初始值就是1 { sum *=n; n--; } printf( "%d\n", sum); system( &quo

大数问题:求n的阶乘

题目:求100! 这看起来是一个非常简答的问题,递归解之毫无压力 int func(int n){ if(n <= 1) return 1; else return n*func(n-1); } 但你会发现,题目真的有这么简单吗,考虑整形数据越界没有? 这实际上是一个大数问题! 大数怎么表示呢,非常直接的.我们会想到用字符串来表示.但表示的过程中还得做阶乘运算.是不是想象的那么复杂呢? 事实上.用主要的乘法运算思想(从个位到高位逐位相乘,进位)来考虑,将暂时结果的每位与阶乘元素相乘.向高位进位.

求n的阶乘的精确值

斯特林公式可以求出n!的近似值,但是如果需要求精确值的话,就要采取另外的办法了.' 当n<=1000的时候,可以直接模拟求阶乘,用一个数组保存阶乘的每一位,大概3000的数组就行.程序如下: #include<stdio.h> #include<string.h> #define N 3000 int f[N];//保存阶乘的位数 int main() { int n,i,j,c; while(~scanf("%d",&n)) { memset(f

2717: 递归函数求n的阶乘

2717: 递归函数求n的阶乘 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1329  Solved: 942[Submit][Status][Web Board] Description 输入一个正整数n,利用递归函数求n的阶乘. 递归函数声明如下: int  fac(int n);  //求n!的递归函数声明 Input 一个正整数n Output n的阶乘值 Sample Input 5 Sample Output 120 HINT 使用递

两种方式实现求n的阶乘

# 通过递归实现求n的阶乘 def my_test(n): if n is 0: return 1 else: return n*my_test(n-1) print(my_test(5)) >> 120 # 通过普通循环实现求n的阶乘 def my_test2(n): result = n for i in range(1,n): result *= i return result print(my_test2(5)) >> 120 原文地址:http://blog.51cto.

递归和非递归分别实现求n的阶乘

思路:举例求6的阶乘,6*5*4*3*2*1.可以将5开始看成另一个整型变量n,用一个循环每次将n的值减少1,.而递归也是如此,每次调用函数的时候将变量减一就可以. 方法一:非递归 1 //非递归: 2 #include<stdio.h> 3 int main() 4 { 5 int num = 1; 6 printf("请输入数字:\n"); 7 scanf("%d",&num); 8 int n = num - 1; 9 while (n &