有理小数化成分数

来源:互联网 发布:淘宝分销平台分销商 编辑:程序博客网 时间:2024/04/29 20:07

有理小数化成分数

#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();
    }
}

0 0
原创粉丝点击