小数化分数
字符串可以方便操作
首先这样
\[p1=s.find('.'),p2=l-s-1
\]
求出这个数需要\(pow(10,p2)\)做最开始的分母
我们可以先做一个做大公约数函数用于约分
声明函数:\(int\) \(G(int\) \(a,int\) \(b)\)
函数主体:\(if(b==0)\) \(return\) \(a;else\) \(return\) \(G(b,a\%b)\)
代码
//(water problem)
#include<bits/stdc++.h>
//#pragma GCC optimize (3)
using namespace std;
int G(int a,int b){if(b==0) return a;else return G(b,a%b);}
int main()
{
string s;cin>>s;int l=s.size();
int p1=s.find('.');int p2=l-p1-1;
int f1=pow(10,p2),f2=0;
for(register int i=p1+1;i<l;i++) f2=f2*10+s[i]-'0';
int x=f1;f1/=G(f1,f2);f2/=G(x,f2);
cout<<f2<<'/'<<f1;
return 0;
}
做完可以看看分数计算