请教一个算法问题。。。

冷西瓜 2016-06-13 10:31:13
就是我要求(阶乘) N! 的值的位数,为什么可以用取对数log10的方法来求呢?
...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷西瓜 2016-06-15
  • 打赏
  • 举报
回复
引用 6 楼 FancyMouse 的回复:
一个数x有N位,因为第一项至少是1,所以x>=10^(N-1)。因为高于N位的数码都是0,所以x<=9*10^(N-1)+9*10^(N-2)+...+9<10^N 10^(N-1)<=x<10^N 两边取log10 N-1<=log10(x)<N
多谢耐心解答!
冷西瓜 2016-06-15
  • 打赏
  • 举报
回复
引用 4 楼 lm_whales 的回复:
1)乘积化和: lg(a*b) = lg(a)+lg(b) 2)位数和对数的关系, 对于一个大于0 的数 x 常用对数的整数部分加一,就是位数 假设 lg(x) =n+lg(t) //1<=t <10 则有 x= t *10^n 也就数有 n+1位数 lg(1)=0 lg(2)=0.3010 lg(10)=1 3)常用对数 lg C语言中, 用库函数 log10表示 常用对数lg就是以10为底数的对数
多谢耐心解答!
赵4老师 2016-06-14
  • 打赏
  • 举报
回复
仅供参考:
#include<stdio.h>
#define N 1000    //要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()//雨中飞燕之作
{
    for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
        s[a]=(b+=s[a]*t)%10000,b/=10000;
    for(printf("%d",s[*s]);--*s>0;) printf("%04d",s[*s]);
    return 0;
}
paschen 2016-06-14
  • 打赏
  • 举报
回复
FancyMouse 2016-06-14
  • 打赏
  • 举报
回复
一个数x有N位,因为第一项至少是1,所以x>=10^(N-1)。因为高于N位的数码都是0,所以x<=9*10^(N-1)+9*10^(N-2)+...+9<10^N 10^(N-1)<=x<10^N 两边取log10 N-1<=log10(x)<N
lm_whales 2016-06-13
  • 打赏
  • 举报
回复
对于一个大于1 的数 x 当整数部分为负值的时候,表示这个是小于1 就变成计算小数位数了
lm_whales 2016-06-13
  • 打赏
  • 举报
回复
1)乘积化和: lg(a*b) = lg(a)+lg(b) 2)位数和对数的关系, 对于一个大于0 的数 x 常用对数的整数部分加一,就是位数 假设 lg(x) =n+lg(t) //1<=t <10 则有 x= t *10^n 也就数有 n+1位数 lg(1)=0 lg(2)=0.3010 lg(10)=1 3)常用对数 lg C语言中, 用库函数 log10表示 常用对数lg就是以10为底数的对数
冷西瓜 2016-06-13
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
数学上是没问题的 唯一有问题的,是精度问题 因为 n^ ( log( n,x)) =x; 所以 log(n,x) 的整数部分就是 x的位数 (x>0), 如果位数为负值 ,则该数字小于1 成绩的对数,等于对数和,所以这个加法没问题,可以求出位数,如果能够计算出并且精确度可控 那么这么做就可以了,不然会有误差
我就是想知道数学上这个怎么解释?解释为什么可以以取对数的方法来求它的位数?
lm_whales 2016-06-13
  • 打赏
  • 举报
回复
数学上是没问题的 唯一有问题的,是精度问题 因为 n^ ( log( n,x)) =x; 所以 log(n,x) 的整数部分就是 x的位数 (x>0), 如果位数为负值 ,则该数字小于1 成绩的对数,等于对数和,所以这个加法没问题,可以求出位数,如果能够计算出并且精确度可控 那么这么做就可以了,不然会有误差
冷西瓜 2016-06-13
  • 打赏
  • 举报
回复
      scanf("%d",&m);
      sum=0;
      for(i=1;i<=m;i++)
      {
          sum=sum+log10((double)i);
          }
      printf("%d\n",(int)sum+1);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧