大学生程序代写

/*  NYOJ69 阶乘数位长度





http://acm.nyist.net/JudgeOnline/problem.php?pid=69





数的长度

时间限制:3000 ms  |  内存限制:65535 KB 

难度:1

描述 

    N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?





输入 

首行输入n,表示有多少组测试数据(n<10)

随后n行每行输入一组测试数据 N( 0 < N < 1000000 ) 

输出 

对于每个数N,输出N!的(十进制)位数。 

样例输入 

3

1

3

32000样例输出 

1

1

130271

来源 

ACM教程 

上传者 

rooot

*  方法一:

*可设想n!的结果是不大于10的M次幂的数,即n!<=10^M(10的M次方),则不小于M的最小整数就是 n!的位数,对



 该式两边取对数,有 M =log10^n! 即:M = log10^1+log10^2+log10^3...+log10^n 循环求和,就能算得M值,



该M是n!的精确位数。当n比较大的时候,这种方法方法需要花费很多的时间。





方法二:



 利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:



  res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );



 当n=1的时候,上面的公式不适用,所以要单独处理n=1的情况!

.

 有关斯特林(Stirling)公式及其相关推导,这里就不进行详细描述,有兴趣的话可看这里。



这种方法速度很快就可以得到结果。详细证明如下:



  http://episte.math.ntu.edu.tw/articles/mm/mm_17_2_05/index.html

14.

*/





//c语言版

#include <stdio.h>

#include <math.h>

int main()

{

int n,cas,i;

double sum;

scanf("%d",&cas);

while (cas--)//n!≈√2πn { (n/e)^n }

{

scanf("%d",&n);

sum=1;

for(i=1;i<=n;i++) 

sum+=log10((double)i);

printf("%d\n",(int)sum);

}

return 0;

}





//C++版





/*

#include<iostream>

#include <cmath>

using namespace std;





int normal(double n){

double x=0;

   while(n){

   x +=log10(n);

    n--;

}

return (int)x+1;

}

 long stirling(double n){

long x=0;

    if( n ==1 )

      x = 1;

   else{  x = (long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );

}

return x;

}

    int main()

{int n;

 cin>>n;//c++中输入一个数

      while(n--){ 

  int x;

        cin>>x;

     cout<<stirling(x)<<endl;//c++中输出一个数

 }

return 0;





}

*/

作者:chao1983210400 发表于2013-7-10 13:19:06 原文链接
阅读:6 评论:0 查看评论

[原]NYOJ-数的位数-69的更多相关文章

  1. java实现:将一个数各个位数相加

    前面已经实现过这个程序,现在我们就不多说了,直接更改C的源码,实现这个JAVA程序. import java.util.Scanner; public class HelloWorld { publi ...

  2. 利用C语言判别输入数的位数并正逆序输出

    利用C语言判别用户输入数的位数并正逆序输出 #include <stdio.h> void main() {        int i, scanfNum, printfNum, temp ...

  3. nyoj 69-数的长度 (log10(),计算数的位数)

    69-数的长度 内存限制:64MB 时间限制:3000ms 特判: No 通过数:10 提交数:13 难度:1 题目描述: N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)····· ...

  4. nyoj 96 n-1位数(处理前导 0 的情况)

    n-1位数 时间限制:3000 ms  |            内存限制:65535 KB 难度:1   描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...

  5. nyoj 数的长度

    描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?   输入 首行输入n,表示有多少组测试数据(n<1 ...

  6. NYOJ——————数的长度(斯特林公式的应用)

    数的长度 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出 ...

  7. nefu26(求数的位数)

    Description 根据密码学需要,要计算某些数的阶乘的位数. Input 第一行为整数n ,接下来 n 行, 每行1个数m (1 ≤ m ≤ 10^7) . Output 输出m的阶乘的位数. ...

  8. nyoj 96 n-1位数(处理前导 0 的情况)(string)

    n-1位数 时间限制:3000 ms  |            内存限制:65535 KB 难度:1   描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...

  9. HDU 1018 阶乘数的位数

    题目大意: 将一个数开阶乘后得到的值,来求这个值的位数 n! = 1*2*3*4...*n 对于求一个数的位数的方法为ans = lg(n!) + 1 那么就可以看作 ans = lg(1) + lg ...

随机推荐

  1. 关于函数的return

    function add(x, y) { var total = x + y; return total; } add(5,10); 关于函数的return 我一开始是认为没有什么用的  后来在项目中 ...

  2. ios -仿微信有多级网页时,显示返回跟关闭按钮

    @property (nonatomic, copy) NSString * url; @interface WebViewController ()<UIWebViewDelegate,UIG ...

  3. 手机touch事件

    touchstart:触摸开始的时候触发 touchmove:手指在屏幕上滑动的时候触发 touchend:触摸结束的时候触发 而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点( ...

  4. springmvc demo

    [说明]今天上午稍稍偏了一下方向,看了看servlet的相关知识,下午做maven+spring+springMVC的整合,晚上成功实现了一个小demo(可以在jsp动态页面上获得通过地址栏输入的参数 ...

  5. 【BZOJ1899】[Zjoi2004]Lunch 午餐 贪心+DP

    [BZOJ1899][Zjoi2004]Lunch 午餐 Description 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时 ...

  6. 记录-Maven下载jar包失败解决办法

    maven从nexsu上面拉jar包,有时会因为网络问题导致下不了包,这时候文件夹内会个*lastUpdated.properties的文件,而这文件的存在会导致下次服务器不会去下载这个包,这时候要删 ...

  7. 九度OJ 1197:奇偶校验 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3590 解决:1511 题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). ...

  8. x-www-form-urlencoded名字的由来

    1 提交的是表单数据 所以用form. 2 提交的形式是以参数放在url后面的形式提交的 例如,以x1=y1&x2=y2&x3=y3的形式放在url后面的形式提交,所以是urlenco ...

  9. iOS main函数讲解

    int main(int argc, char * argv[]) { @autoreleasepool { //四个参数 主要讲解后面两个参数 /* 第三个参数:UIApplication或者其子类 ...

  10. OpenCV编程->RGB直方图统计

      我们在处理彩色图像时.特别是在做局部图像的阈值切割时,须要一个直观的RGB统计图.   接下来開始实现.    代码: void CalcHistRGB() { IplImage* img_sou ...