康乐.。oO?๊๊๊๊๊๊


私信TA

用户名:uq_73401557961

访问量:360

签 名:

等  级
排  名 4402
经  验 1703
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

因为相除时每一次的余数要小于除数,即余数的个数是有限的.
两个整数相除,商要么是整数,要么有限小数,要么是无限(循环)小数.


注意事项:

找出循环部分

参考代码:

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<unordered_map>
#define F(i,j,k) for(int i = j; i < k; ++i) 
#define ed <<endl
#define kg <<' '<<
#define ct cout<<
using namespace std;

int m,n,k;
vector<int> ans;
unordered_map<int,int> mp;

void solve(){
    int i,begin=-1;ans.push_back(0);
    for(i = 1; i < k + 3; ++i){
        m*=10;
        if(mp[m]){
            begin = mp[m];//开始循环就退出,记录循环起点
            break;
        }
        ans.push_back(m/n);
        mp[m] = i;//ct k kg i kg m kg ans[i] ed;
        m%=n;
    }
    int p;
    int len = i - begin;//循环部分的长度
    F(j,0,3){
        p = k+j;//要输出第几个数
        if(p<ans.size()){//没在循环内
            ct ans[p];
        }else{//在循环内
            p-=begin;
            ct ans[p%len + begin];
        }
    }
}

int main(){
    cin>>m>>n>>k;
    m%=n;
    solve();
}


 

0.0分

2 人评分

  评论区

  • «
  • »