有理小数化成分数
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
char a[100],ch;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
void simplify(int &a,int &b)
{
int t=gcd(a,b);
a/=t;b/=t;
}
int main()
{
while(true){
cout<<"您是需要把无限循环小数化成分数吗?如果是请输入y/Y,"<<endl<<"如果不是请输入n/N,代表是有限小数化成分数"<<endl;
bool judge;
cout<<"如果是无限循环小数,请输入一个小数,"<<endl<<"形如0.123代表是以123为循环的小数0.123 123 123..."<<endl;
while(true)
{
ch=getchar();
getchar();
if(ch=='y'||ch=='Y'||ch=='N'||ch=='n')break;
cout<<"输入错误,请重新输入:"<<endl;
}judge=(bool)(ch=='Y'||ch=='y');
scanf("%s",a);
int sum=0,num=0;
for(int i=2;a[i];i++)
{
int t=a[i]-'0';
sum=(sum+t)*10;
num++;
}sum/=10;
int tt=1;
while(num--){tt*=10;}
if(judge)//比如x=0.123 123 123...那么就是x=0.123+x*0.001; 也就是999x=123;x=123/999;
{
cout<<"您输入了无限循环小数,小数部分就是"<<sum<<endl;
tt--;
}
simplify(sum,tt);
cout<<"答案就是:"<<sum<<"/"<<tt<<endl;;
getchar();
}
}