原题链接:蓝桥杯2017年第八届真题-小数第n位
解题思路:
因为相除时每一次的余数要小于除数,即余数的个数是有限的.
两个整数相除,商要么是整数,要么有限小数,要么是无限(循环)小数.
注意事项:
找出循环部分
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复