题解 P6485 【[COCI2010-2011#4] PROSJEK】
我们使用
观察
因为最多9位小数,将 gcd即可。
注意当
担心浮点误差?使用Round即可解决问题。
#include <bits/stdc++.h>
using namespace std;
double t,rem;
long long x,y,g,lower,v[10];
int main(){
cin>>t;
rem=t-floor(t);//小数部分
lower=floor(t);//整数部分(下边界)
if(rem==0){v[lower]=1;goto kkk;}//特判
rem*=1e9;rem=round(rem);//消除浮点误差
x=1e9-rem;y=rem;//即比式右边两项
g=__gcd(x,y);//求gcd
x/=g,y/=g;
v[lower]=x;
v[lower+1]=y;//求出答案
kkk:;
for(int i=1;i<=5;i++) cout<<v[i]<<" ";
return 0;
}