法一:对一个数求它的对数,+1取整为其位数

问题转化为int (log10(N!)+1),对数性质log10(N!)=log10(N)+log10(N-1)+...+log10(1)

/*用log10求位数*/#include<stdio.h>
#include<math.h>int main()
{int tim,N;scanf("%d",&tim);while(tim--){int i;double NumOfDigit=1;scanf("%d",&N);for(i=N;i>=1;i--){NumOfDigit+=log10(i);}printf("%d\n",(int)NumOfDigit);}
}

  当n偏大的时候,时间长,TLE

法二:Stirling公式

log(n!) = log10(sqrt(2*pi*n)) + n*log10(n/e);

/*用斯特灵求位数*/#include<stdio.h>
#include<math.h>
#define e 2.718281828459045
#define pi 3.141592653589793239
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&N);double num_digit;num_digit=log10(sqrt(2*pi*N)) + N*log10(N/e);printf("%d\n",(int)num_digit+1);}return 0;
}

  WA两次原因:

 num_digit=log10(sqrt(2*pi*N)) + N*log10(N/e)+1;printf("%d\n",(int)num_digit);

  当N=1,num_digit=0.几,因为当n=1时,

log10(sqrt(2*pi*N)) + N*log10(N/e)=-0.03

  最后值就为0

总结:用斯特林公式求位数时,考虑到N=1,加1放在取了整之后

(int)(log10(sqrt(2*pi*N)) + N*log10(N/e))=0加1放在取了整之后

int(3.1+1)=4int(3.1)+1=4int(3)+1=4int(3+1)=4int(-0.03)+1=1int(-0.03+1)=0 

转载于:https://www.cnblogs.com/gabygoole/p/4471397.html

poj1423---求一个大数的位数方法,我猜网站上统计输入字符少于多少位的那个算法...相关推荐

  1. Java黑皮书课后题第2章:2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加

    2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加 题目 题目描述 运行示例 题目槽点与破题 题目槽点 破题 如何提取数字 代码块 方法评价 题目 题目描述 2.6 ...

  2. 求一个整数的位数(包含0,正数和负数)

    求一个整数的位数时,每次丢弃个位数字,计数器加1.当该整数为0时,所得计数器的数值即为该整数的位数:其中n/10是求个位数字.(测试数字时尤其注意0这个数字) #define _CRT_SECURE_ ...

  3. 习题 8.6 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。

    C程序设计(第四版) 谭浩强 习题8.6 个人设计 习题 8.6 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长度. 代码块: 方法1: #include <stdio.h ...

  4. 写一个函数,求一个字符串的长度,在main 函数中输入字符串,并输出其长度。

    // 写一个函数,求一个字符串的长度,在main 函数中输入字符串,并输出其长度. #include <stdio.h> main() {  int len;  char*str[20]; ...

  5. 求一个矩阵的鞍点(即在行上最小而在列上最大的值)(C++编写)(循环与递归)

    算法经典题型1 求一个矩阵的鞍点(即在行上最小而在列上最大的值) 用到的算法 思想是 -循环与递归 博主用到的环境:Win7, CodeBlocks等. 一.代码 #include <iostr ...

  6. 写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度

    写一个函数,求一个字符串的长度.在main函数中输入字符串,并输出其长度 代码如下: #include<stdio.h> int len(char *p); int main() {int ...

  7. 题8.6:写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。

    题目 本题是谭浩强<C程序设计课后习题>题8.6. 题目: 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长度. 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨, ...

  8. 求一个校园生活服务类型的网站源码

    求一个校园生活服务类型的网站源码求一个校园生活服务类型的网站源码求一个校园生活服务类型的网站源码

  9. 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。

    写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长度. 解题思路: 字符串以\0作为结尾,则从第一个字符开始向后移动遇到\0认为字符串结束. 答案: #include <std ...

最新文章

  1. Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
  2. js、css分别实现元素水平垂直居中
  3. wpf展开树节点_【转】WPF TreeView如何展开到某个节点
  4. 深入理解分布式技术 - Redis 分布式锁解决方案
  5. 智能合约WASM语言 (1)概述
  6. 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
  7. 定了!10 月 8 日!Jupyter Notebook 原生支持将正式来到 VS Code!
  8. java 饥饿现象,Java单例模式、饥饿模式代码实例
  9. java rowmapper 通用实现_必经之路!各大网站力推Java代码优化:77案例+28技巧
  10. windows桌面的“我的电脑”“IE”等消失的解决方法
  11. 160个crackme 008 Andrénalin.1
  12. TCP通信调试助手===wireshark使用
  13. 三只松鼠、良品铺子、百草味隐藏的巨大套利机会
  14. 【日常吐槽 · 第七期】进击的博客
  15. 进程理论以及开启子进程的两种方式
  16. 利用matlab快速实现连续系统转变为离散系统(z变换)
  17. 如何用无线路由器接服务器主机,路由器上再接一个路由器如何连接设置【详解】...
  18. 计算机领域名人事迹及意义,关于电脑的好处的名人名言-关于电脑时代需要练字的相关事例和名人名言?...
  19. CPU性能是否受年龄影响?
  20. Linux内核块设备总结(一)

热门文章

  1. JQuery实现ajax跨域
  2. DataGrid多层表头设计
  3. 编译器前端概述与可信编译器
  4. MySQL深度剖析之事务隔离级别和锁机制(2021)
  5. Scala基础之变量和数据类型
  6. windows 批处理 for循环语句
  7. (09)Vivado IO约束
  8. (46)FPGA对数运算符(V代码实现)
  9. oracle 强制索引_当唯一索引遇见分布式数据库
  10. layuiajax提交表单控制层代码_Ninja Forms:免费的联系表单插件,却提供了付费表单才有的功能【视频+图文】...