之江学院第0届校赛决赛 K-qwb与小数

本文介绍了一种使用快速模幂方法来求解小数点后指定位数的问题。通过分析题目需求及特点,给出了具体的实现算法,并提供了C++代码示例。

题目链接:http://115.231.222.240:8081/JudgeOnline/problem.php?cid=1005&pid=10

题目思路:简单粗暴,让你求解小数点后第n位数,题解也简单粗暴,就是利用快速模幂,关键是怎么用。

核心:我们求小数点后的数的求法就是 a%b*10/b,.. 两位的话就是 a%b*10%b*10/b三位就是 a%b*10%b*10%b*10/b  化简看看就想到快速幂了。这种关系到不断的乘不断的乘,只要想快速模幂就好了,然后再想一下具体的求的方法。

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll quickmod(ll a,ll b,ll c)
{
    ll ans=1;
    ll tmp=a%c;
    while(b){
        if(b&1) ans=ans*tmp%c;
        tmp=tmp*tmp%c;
        b>>=1;
    }
    return ans;
}

int main()
{
    ll a,b,n;
    while(~scanf("%lld%lld%lld",&a,&b,&n)){
        n--;
        printf("%lld\n",(a*quickmod(10,n,b)%b*10)/b);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值