蓝桥杯2020年第十一届国赛真题-循环小数
题目要求
题目描述
已知 S 是一个小于 1 的循环小数,请计算与 S 相等的最简真分数是多少。
例如 0 . 3333 · · · 等于 1/3,0 . 1666 · · · 等于 1/6。
例如 0 . 3333 · · · 等于 1/3,0 . 1666 · · · 等于 1/6。
输入
输入第一行包含两个整数 p 和 q,表示 S 的循环节是小数点后第 p 位到第q 位。第二行包含一个 q 位数,代表 S 的小数部分前 q 位。
输出
输出两个整数,用一个空格分隔,分别表示答案的分子和分母。
样例输入
1 6
142857
样例输出
1 7
提示
【评测用例规模与约定】
对于所有评测用例,1 ≤ p ≤ q ≤ 10
对于所有评测用例,1 ≤ p ≤ q ≤ 10
解题思路
代码
#include<bits/stdc++.h>
using namespace std;
//取得最大公约数
long gcd(long a,long b){
if(b==0) return a;
else return gcd(b,a%b);
}
int main(){
long p,q;
long L; //存放循环体
long F; //存放非循环体
long res1,res2; //分子、分母
cin>>p>>q;
cin>>L;
F=L/pow(10,q-p+1);
res1=L-F;
res2=pow(10,q)-pow(10,p-1);
long gcd1 = gcd(res1,res2);
res1/=gcd1;
res2/=gcd1;
cout<<res1<<" "<<res2<<endl;
return 0;
}