写得着急,做得简陋,敬请谅解。 注:输入内容中必须有. 。
#include <iostream>
#include <cmath>
using namespace std;
int zdgys(int a,int b){
for(int i=a>b?a:b;i>=1;i--){
if(a%i==0&&b%i==0) return i;
}
}
int main(){
string x;
cin>>x;
int len=x.length(),y,z,
zs=0,xs=0;
for(int i=0;i<len;i++){
if(x[i]=='.'){
z=i-1;
y=i+1;
break;
}
}
for(int i=0;i<=z;i++){
zs+=pow(10,z-i)*(x[i]-'0');
}
for(int i=y;i<len;i++){
xs+=pow(10,len-i-1)*(x[i]-'0');
}
int b=pow(10,len-y),a=xs+zs*b,gys=zdgys(a,b);
cout<<a/gys<<"/"<<b/gys;
return 0;
}
更新: 我在学校机房整活,修改、优化了一下这个程序。
#include <iostream>
#include <cmath>
using namespace std;
int zdgys(int a,int b){
for(int i=a>b?a:b;i>=1;i--){
if(a%i==0&&b%i==0) return i;
}
}
int main(){
string x;
bool jie=false;
cin>>x;
int len=x.length(),y,z,
zs=0,xs=0;
for(int i=0;i<len;i++){
if(x[i]=='.'){
z=i-1;
y=i+1;
jie=true;
break;
}
}
if(jie){
for(int i=0;i<=z;i++){
zs+=pow(10,z-i)*(x[i]-'0');
}
for(int i=y;i<len;i++){
xs+=pow(10,len-i-1)*(x[i]-'0');
}
int b=pow(10,len-y),a=xs+zs*b,gys=zdgys(a,b);
cout<<a/gys<<"/"<<b/gys;
}
else{
cout<<"impossible!";
}
return 0;
}
|