杭电OJ(HDOJ)1018题:求n的阶乘位数(数学公式)
2014-10-17 20:06
225 查看
题意:
先输入一个整数n,表示有n个测试案例,接下来第输入一个数a(1<=a<=10000000),求a的阶乘位数,并输出。
错误解决方案:
采用大数方法进行解决,但a的输入范围太大,使用大数会超时,代码:
正确的解决方案:
整数a的位数为:(int)log10 (a) +1。
对于任意一个给定的正整数a,假设存在正整数x,使得10^(x-1)<=a<10^x,那么显然a的位数为x位,又因为log10(10^(x-1))<=log10(a)<(log10(10^x)),
即x-1<=log10(a)<x,则(int)log10(a)=x-1,可化为(int)log10(a)+1=x,最后得到a的位数是(int)log10(a)+1
已知n!=1*2*3*4*········*n,log10(n!)=log10(1*2*3*4*········*n) =log10(1)+log10(2)+log10(3)+log10(4)·······+log10(n)
求得n!的位数为:(int)(log10(1)+log10(2)+log10(3)+......+log10(n)) + 1
先输入一个整数n,表示有n个测试案例,接下来第输入一个数a(1<=a<=10000000),求a的阶乘位数,并输出。
错误解决方案:
采用大数方法进行解决,但a的输入范围太大,使用大数会超时,代码:
#include<iostream> #define N 1000 using namespace std; //大数计算函数 void calculate(int arr[],int t) { int i; int c=0; int temp; for(i=0; i<N; i++) { temp=arr[i]; arr[i]=(arr[i]*t+c)%10; c=(temp*t+c)/10; } } int main() { int n,count,t,i; int arr = {0}; arr[0]=1; cin>>n; while(n--) { cin>>t; for(i=1; i<=t; i++) { calculate(arr,i); } for(i=N-1; i>=0; i--) { if(arr[i]) break; } cout<<i+1<<endl; //数组再次归零 for(i=1;i<N;i++) arr[i]=0; arr[0]=1; } }
正确的解决方案:
整数a的位数为:(int)log10 (a) +1。
对于任意一个给定的正整数a,假设存在正整数x,使得10^(x-1)<=a<10^x,那么显然a的位数为x位,又因为log10(10^(x-1))<=log10(a)<(log10(10^x)),
即x-1<=log10(a)<x,则(int)log10(a)=x-1,可化为(int)log10(a)+1=x,最后得到a的位数是(int)log10(a)+1
已知n!=1*2*3*4*········*n,log10(n!)=log10(1*2*3*4*········*n) =log10(1)+log10(2)+log10(3)+log10(4)·······+log10(n)
求得n!的位数为:(int)(log10(1)+log10(2)+log10(3)+......+log10(n)) + 1
#include<iostream> #include<math.h> using namespace std; int main() { int n,t,i; double s; cin>>n; while(n--) { cin>>t; s=0; for(i=1; i<=t; i++) { s+=log10((double)i); } cout<<(int)s+1<<endl; } }
相关文章推荐
- HDOJ 1018 数学题(N阶乘位数)
- 杭电OJ(HDOJ)2036题:改革春风吹满地(几何,数学公式)
- HDOJ 1018(阶乘位数)
- HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】
- HDOJ1018 Big Number(斯特林公式求阶乘位数)
- HDOJ 1018 Big Number(大数位数公式)
- HDOJ---1018 求N!的位数[斯特林公式---处理阶乘及阶乘位数的问题]
- hdu 1018 Big Number (求一个数的阶乘的位数,公式!!!)
- HDOJ 1018 Big Number(大数位数公式)
- hdu 1018 Big Number (求一个数的阶乘的位数,公式!!!)
- hdu 1018 求大数阶乘位数有公式
- OJ上关于阶乘位数的公式
- hdoj 1018 Big Number (n!的数学公式 数学)
- 杭电problem1018-大数(阶乘的位数问题)
- hdoj1018 大数阶乘位数
- 杭电1018阶乘位数
- ACM--大数阶乘位数--HDOJ 1018--Big Number--水
- 杭电1018 Big Number (求阶乘结果的位数)
- HDOJ, 杭电1032, The 3n+1 problem. POJ, 北大OJ,1207....数学题。。又一发
- hdoj1018_Big Number(大数阶乘位数)