求一个分数小数点后指定位数的数字
题目链接:https://ac.nowcoder.com/acm/contest/548/B
题意:给你一个分数a/b,求分数小数点后k1-k2位数值各是多少
之前写过天梯赛的模拟竖式题,这个题看了看就直接模拟了,然后就T了
但还是可以用模拟竖式的思想,n*10^(k1-1)*10/n就是小数点后第k1位的值了
记得开long long 然后中间用快速幂取模以防爆掉
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll m,n,k1,k2; ll pow_mod(ll a, ll b){//a的b次方求余p ll ret = 1; while(b){ if(b & 1) ret = (ret * a) % n; a = (a * a) % n; b >>= 1; } return ret; } int main() { int T;scanf("%d",&T); while(T--){ scanf("%lld%lld%lld%lld",&m,&n,&k1,&k2); ll ans=m*pow_mod(10,k1-1)%n; for(int i=k1;i<=k2;i++){ ans*=10; cout<<ans/n; ans%=n; } cout<<endl; } return 0; }