N!的位数

Description

求N!的位数

Input

输入第一行为一个正整数 n(1<=n<=25000)。

Output

输出 n!的位数。

Sample Input

1020

Sample Output

2019

思路

求一个数的位数,我们只需要对其进行以10为底的对数运算。假设有个数是四位数,那么其介于1000-10000中间,log10(1000)-log10(10000),结果为3-4,取4.。另外也可以通过斯特林公式求解。这就是说,对于足够大的整数n,这两个数互为近似值。更加精确地:
#include<stdio.h>
#include<math.h>  

int main()
{
    int N,i;
    double cnt = 0;
    scanf("%d",&N);
    for (i = 1;i <= N;i++)
    {
        cnt += log10(i);
    }
    printf("%d\n",int(cnt) + 1);
    return 0;
}

  

#include<stdio.h>
#include<math.h>
const double PI = acos(-1.0);
const double e = exp(double(1));
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",int(log10(sqrt(2*PI*n))+n*log10(n/e)) + 1);
    return 0;
}

  

时间: 2024-08-07 12:14:34

N!的位数的相关文章

18周OJ测试项目1--百位数答应了

m是个三位的整数,家里出了点小麻烦.个位数和十位数一直对百位数凡事都先露脸心怀不满,想出个办法,联手向百位数发起挑点.他们两个先相加,再减去百位数,以相减结果得到正值为傲.大度的百位数答应了:不就是陪着这两个无聊的家伙解闷嘛.请你编程序,帮他们一比高低. 代码如下: #include <iostream> using namespace std; int main( ) { int m, a, b, c; cin>>m; a=m/100; c=m%10; b=(m%100)/10;

在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数)

//在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数) function formatNum(num, n) {//参数说明:num 要格式化的数字 n 保留小数位 num = String(num.toFixed(n)); var re = /(-?\d+)(\d{3})/; while (re.test(num)) num = num.replace(re, "$1,$2") ret

n-1位数

n-1位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 输出M行,每行为对应行的n-1位数(忽略前缀0).如果除了最高位外,其余位都为0,则输出0. 样例输入 4 1023 5923 923 1000 样例输出 23 923 23 0 #include<iostream>#

51nod 1435 位数阶乘

1435 位数阶乘 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 X是一个n位数的正整数 (x=a0a1...an−1) 现在定义 F(x)=∏i=0n−1(ai!)  , 比如F(135)=1!*3!*5!=720. 我们给定一个n位数的整数X(至少有一位数大于1,X中可能有前导0), 然后我们去找一个正整数(s)符合以下条件: 1.这个数尽可能大, 2.这个数中不能含有数字0或1. 3.F(s)=F(x)

谭浩强 c程序设计 8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串&quot;486&quot;。n的位数不确定,可以是任意位数的整数。

8.17用递归法将一个整数n转换成字符串.例如,输入486,应输出字符串"486".n的位数不确定,可以是任意位数的整数. #include <stdio.h> char str1[20];int i=0;long n;int main(){        int longToStr(long n);    char *revstr(char *str, int len);    printf("请输入一个整数n:\n");    scanf("

一个5位数,判断它是不是回文数

题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 1 package com.li.FiftyAlgorthm; 2 3 import java.util.Scanner; 4 5 /** 6 * 题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 7 * @author yejin 8 */ 9 public class Palindrom { 10 public static void main(Strin

python随机生成6位数验证码

#随机生成6位数验证码 import randomcode = []for i in range(6):    if i == str(random.randint(1,5)):        code.append(i)    else:       temp =  random.randint(65,90)       code.append(chr(temp)) print ''.join(code) ###扩充random用法,随机生成树,和程序无关 print random.rando

C语言将十进制数转化为二进制(递归,规定位数)

/*运用递归算法*/ #include<stdio.h>void B(int n)   //定义函数{ if (n != 0) {  printf("%d",n%2);  B(n / 2); }}int main(){ int n; printf("Input number:"); scanf("%d",&n); printf("输出二进制:"); B(n);   //在B()函数里打印二进制数 retur

Oracle截取固定位数的小数方法总结

trunc,to_char,round,cast 1.trunc截取数字,小数位直接舍去,整数位取0.不进行四舍五入 第二个参数是要截取的位数,如果不是整数也只看整数位 2.to_char(),把数字转成字符的同时截取位数,且会四舍五入.对于本文对数字操作的情况,to_char的第一个参数可以是float,numberic,int, 第二个参数模板,描述要转换成什么样的形式. 注意d2,由于整数位给的'9'不够多,选出来是'###'. 利用to_char函数转换数字还有更多用法可以参考API.

191. 求1的位数 Number of 1 Bits

Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight). For example, the 32-bit integer '11' has binary representation 00000000000000000000000000001011, so the function should retu