杭电OJ【1018】Big Number 大数阶乘位数

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情


思路分析:

求大数阶乘位数问题,如果n较大的时候,n!必然是一个很大的数。

任意一个数a的位数等于long10(a)+1

推导过程如下:

如果 10^(x-1)<=a<10^x,则a必然是一个x位数。

则 ln(10^(x-1))<=ln(a)<ln(10^x),即x-1<=ln(a)<x,则(int)ln(a)=x-1,得到x=(int)ln(a)+1。

所以a的位数是(int)ln(a)+1。

假设A=n!=1*2*3*……*n=(int)ln(1*2*3*……*n)+1=(int)(ln(1)+ln(2)+ln(3)+……+ln(n))+1。

所以n!=(int)(ln1+ln2+……+lnn)+1


代码:

#include<stdio.h>
#include<math.h>

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


杭电OJ(HDOJ1018题:求n的阶乘位数(数学公式) 题意: 先输入一个整数n,表示有n个测试案例,接下来第输入一个数a(1 错误解决方案: 采用大数方法进行解决,但a的输入范围太大,使用大数会超时,代码: #include #define N 1000 using namespace std; //大数计算函数 void calculate(int arr[],int t) { int i; int c=0; 阅读详情

相关推荐

杭电OJ 1018 大数

题目描述: 题目是求n!的位数,当n'普通的ke'x科学计计算,可以处理不超过10的100次幂的计算器可以计算至69!。 当n特别大时斯特林公式估计: 斯特林公式:n很大时,估计值: 更精确的估计值: 其中: 可用出计算出近似值,然后以10为底取对数再加1就是位数。 AC通过的代码: //万能头 #includ...

qq_41971768的博客 7691

杭电OJ1018 Big Number 解题报告

Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18173    Accepted Submission(s): 8167 Problem Description In many ap

Emacs_Linux的专栏 764

杭电OJ-ACM1018 (Big Number)

ACM1018

m0_73891157的博客 434

杭电oj--大数1018

在许多应用中,需要非常大的整数。其中一些应用程序使用密钥来安全传输数据、加密等。在这个问题中,你会得到一个数字,你必须确定数字阶乘中的位数。输入由几行整数组成。第一行包含一个整数 n,即要测试的案例数,后跟 n 行,每行一个整数 1 ≤ n ≤ 107。输出包含输入中出现的整数的阶乘位数

无聊人的博客 456

杭电oj HDOJ 1018 Big Number(斯特林公式求大数阶乘位数

杭电oj HDOJ 1018 Big Number 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Problem Description In many applications very large integers numbers are required. Some of these applications are using ke...

qq_39880604的博客 284

杭电oj1018Big Number

杭电oj1018Big Number) Problem Description In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In t...

qq_35225958的博客 385

HDOJ 1018 Big Number

来源:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22074    Accepted Submission(

MummyDing's Blog 1471

杭电ACM OJ 1018 Big Number 两数相乘出一个大数,求大数位数 注意log的使用

Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 39368    Accepted Submission(s): 19166 Problem Description In many appli

qq_36523667的博客 621

杭电OJ——1018 Big number

Big Number    Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/32768 K (Java/Others) Problem Description In many applications very large integers numbers are required. Some o

李树花开,风中摇曳 3615

杭电OJ1018

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

he_qiao_2010的专栏 1230

ACM大数阶乘问题

[size=medium]题目的大概意思是求数阶乘位数: Problem Description In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption...

beyondjhf_2008的博客 346

杭电OJ1018--计算一个数的阶乘位数

#include <stdio.h> #include <stdlib.h> #include <math.h>//这里是我最想说的,codeblocks不严格,加不加这个数学头文件都行,但再杭电OJ上如果不加的话就是过不了。 //本题若直接相乘肯定会溢出的,所以利用n!的位数等于log10(1)+log10(2)+....log10(n)进行求解 int main() { int n,j,x,i; double sum; scanf("%d...

weixin_53094331的博客 261

杭电oj1000阶乘

#include using namespace std; int main() { int a; while(cin>>a) { for(int i=a;i a=a+i; cout } return 0; }

西柚茶茶的博客 293

杭电ACM——1018Big Number(思维)

数学题,用取对数函数就好。 突破口: 公式:log(i+1)!=log(i+1)+log(i)!; 遍历1~1e7内所有数的阶乘,记录下其对于10的对数log10(i),最终输出的数要+1。 代码如下: #include&lt;cstdio&gt; #include&lt;cmath&gt; using namespace std; double f[2500001]; //需要注意,不能直接定...

shamansi99的博客 355

杭电oj--1018 Big Number

In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you h

yiyuqingning的博客 395

杭电OJ 1018(C++)

整数a的位数为(int)log10(a)+1,则计算N!,可以用(int)log10(1)+log10(2)+...+log10(n)+1。 #include <iostream> #include <cmath> using namespace std; int main() { int n, num; cin >> n; for (int i =...

Intelligence1028的博客 341

杭电OJ 1018 Big Number

斯特林公式

xqch的博客 290

杭电oj-1018

杭电oj1018

imbamizhou的专栏 850
上一篇: 杭电OJ【1017】A Mathematical Curiosity 水题
下一篇: 求最大公约数
karaage
博客等级 码龄11年 13粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值