大数阶乘幂乘的位数以及前几位数求法、无限循环小数的分数表示求法。

目录

 

大数阶乘 大数幂乘等的位数以及结果的前几位数。

无限循环小数的分数表示求法:


大数阶乘 大数幂乘等的位数以及结果的前几位数。

思路:用对数运算。

log10(1)+...log10(n)=log10(1*2*3*...*n)=log10(m*10^x)=log10(m)+log10(10^x)(1<m<10)

(int)之后就是x,也就是转化阶乘为1*10^x,位数就是x+1。

例如前五位数,最终数字肯定在m里面,所以求出m。ans-(int)ans就是log10(m).

Pow(10,ans-(int)ans)就是m,m是【1,10】的小数,需要前几位,就乘以1e(l-1)即可。

int n;

       for(n = 10;n <= 20;n++){

              double ans = 0;

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

                     ans += log10(i);

              }            

              cout << (int)ans+1<< endl;

              cout << (int)(pow(10,(ans-(int)ans))*1e5)<< endl;

       }

无限循环小数的分数表示求法:

0.32(692307)()表示循环部分

消掉循环部分:设x:1e8x-1e2x = 32692307-32; x=32692307-32/1e8-1e2  约分-__gcd

       cout << (32692307-32)/__gcd(32692307-32,99999900) << endl;

       cout << "一"<<endl;

       cout << (1e8-1e2)/__gcd(32692307-32,99999900)<<endl;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值