资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
思路
1.0.333之类(只有循环体)
0.333的循环体的个数为1(即是3),所以分子/分母为3/9=1/3
0.4242 循环体个数为2(42),分子/分母为 42/99…
2.0.1233443344之类(循环体前还有数字的)
0.1233443344=0.12+0.0033443344=12/100+3344/9999/100
通分之后(12 * 9999 + 3344)/(9999 * 100),再找最大公约数,约分之后就得到结果
代码:
#include#include using namespace std; int getnumb(int a,int b)//得到最大公约数的函数 { return b==0?a:getnumb(b,a%b); } int main() { int p,q,num; cin>>p>>q>>num; int x,y;//分子分母 int t2=pow(10,q-p+1);//循环前数对应的10的q-p+1次方 int t1=pow(10,p-1);//循环的数 对应的10的p-1次方 int numb1=num/t2;//循环前部分的数 int numb2=num%t2;//循环部分的数 x=numb1*(t2-1)+numb2;//通分后的分子 y=(t2-1)*t1;//分母 int numb=getnumb(x,y);//得到最大公约数,接下来化简x,y x/=numb; y/=numb; cout< 202205291524日



