题目描述
已知 S 是一个小于 1 的循环小数,请计算与 S 相等的最简真分数是多少。
例如 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
#include<bits/stdc++.h>
using namespace std;
long gcdMax(long x,long y){
int temp;
if(x>y)swap(x,y);//以y作为高位
while(y%x!=0){
temp=y%x;
y=x;
x=temp;
}
return x;
}
int main(){
long p,q,L;//输入数据
cin>>p>>q;
cin>>L;
long F,X,Y;
F=L/pow(10,q-p+1);//存储循环体小数
X=L-F;
Y=pow(10,q)-pow(10,p-1);//X为分子,Y为分母
long gcd;
gcd=gcdMax(X,Y);//辗转相除法
X/=gcd;
Y/=gcd;
cout<<X<<" "<<Y;
}