小数化分数

字符串可以方便操作
首先这样

\[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;
}

做完可以看看分数计算

posted @ 2022-09-25 20:14  Euouae  阅读(43)  评论(1编辑  收藏  举报