蓝桥杯2020年第十一届国赛真题-循环小数

题目要求

题目描述

已知 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 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;
}

 

 
posted @ 2022-04-07 17:40  第厘  阅读(120)  评论(0编辑  收藏  举报