poj1423解题报告

Big Number
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 26063 Accepted: 8323

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
题目的大体意思就是,让你求一个数的阶乘有多少位数,输入格式第一个数代表你要输入几个数,然后接下来的数是你要求解的数。源代码:
#include<iostream>
#include<cmath>
using namespace std;
void fun();
int num[10000001];
int main()
{
	int n,i,s;
	fun();
	cin>>n;
	while (n>=1)
	{
	    cin>>s;
		cout<<num[s]<<endl;
		n--;
	}
	return 0;
}
void fun()
{
    int i;
	double t=0;
	for (i=1;i<10000001;i++)
		    t+=log10((double)i);
		num[i]=(int)t+1;
	}
}
我这种方法属于暴力方法,题目给出所有的数不超过10的7次方,我就把10的7次方以内所有的数用log10的方法全部算出来他们的位数,存到一个10的7次方的数组里,你输入什么数就对应的数组的什么位置,可以快速的得到你要的位数,我看网上有一种用公式的算法,我这种公式渣看到什么pi的就果断放弃了,虽然我的方法耗时间长,空间大,但是简单粗暴,适合我们这些acm的新手~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值