【程序】
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
__int64 zhengshu,Nxiaoshu,Nfenmu,Xxiaoshu,Xfenmu;
__int64 Fenmu,Fenzi,tFenmu,tFenzi,t;
int i,f;
printf("******小数转化分数******\n\n");
printf("循环小数请把循环节用小括弧括起的方法输入\n如:1.2(1)表示1.21111...\n\n");
printf("输入小数:");
while(cin>>s)
{
zhengshu=0;Nxiaoshu=0;Nfenmu=1;Xxiaoshu=0;Xfenmu=0;f=0;
for(i=0;i<s.size();i++)
{
if(f==0&&s[i]!='.') zhengshu=zhengshu*10+s[i]-'0';
else if(s[i]=='.') f=1;
else if(f==1&&s[i]!='(')
{
Nxiaoshu=Nxiaoshu*10+s[i]-'0';
Nfenmu=Nfenmu*10;
}
else if(s[i]=='(') f=2;
else if(f==2&&s[i]!=')')
{
Xxiaoshu=Xxiaoshu*10+s[i]-'0';
Xfenmu=Xfenmu*10+9;
}
}
if(Xfenmu==0) Xfenmu=1;
Fenmu=Xfenmu*Nfenmu*Nfenmu;
Fenzi=Xfenmu*Nfenmu*Nxiaoshu+Nfenmu*Xxiaoshu+Fenmu*zhengshu;
tFenmu=Fenmu;tFenzi=Fenzi;
while((t=tFenzi%tFenmu)!=0)
{
tFenzi=tFenmu;
tFenmu=t;
}
printf("分数表达:%I64d/%I64d\n\n",Fenzi/tFenmu,Fenmu/tFenmu);
printf("输入小数:");
}
return 0;
}
【运行】