小数化分数

2018-01-30 10:44:42来源:网络收集作者:程序诗人人点击

分享
第七城市th7cn

【问题描述】


任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。

【输入形式】


第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。

【输出形式】


对每一个对应的小数化成最简分数后输出,占一行

【样例输入】


3
0.(4)
0.5
0.32(692307)
【样例输出】


4/9
1/2
17/52
【样例说明】
【评分标准】
由于输入的形式,需要将括号内外区分开来,此处用到cin.getline来对输入流中的下一输入进行预判。
具体代码如下:


#include
#include
#include
using namespace std;
//约分操作,返回最大公因数:
int yuefen(int m,int s){
vector aa,bb;
int mm=0,nn=0;
int mmm=m;
int sss=s;
for(int i=2;i<=m;i++){
while((mmm%i)==0){
aa.push_back(i);
mmm=mmm/i;
mm++;
}
}
for(int i=2;i<=sss;i++){
while((sss%i)==0){
bb.push_back(i);
sss=sss/i;
nn++;
}
}
vector d;
int cc=0;
for(int i=0;i for(int j=0;j if(aa[i]!=0&&aa[i]==bb[j]){
d.push_back(aa[i]);
aa[i]=0;
bb[j]=0;
cc++;
}
}
}
int y=1;
for(int i=0;i y=y*d[i];
}
return y;
}
int main(){
int num;
cin>>num;
for(int i=0;i//将括号内外分成两部分,一部分存在a,一部分存在b
int n;// 0
char m;// .
int aa=0;
int bb=0;
vectora;
vectorb;
cin>>n>>m;int p=cin.get();
while(p!=40&&p!='/n'){
a.push_back(p-48); //0.234 输出 2
aa++;
p=cin.get();
}
if(p=='(') //所有小数的情况一起考虑;如果是回车符 p==10;
{ char s[10];
cin.getline(s,10,')');
//cout<string sss=s;
int ss=sss.size();
for(int i=0;i b.push_back(s[i]-48);
bb++;
}
}
int g=0; //将a[aa]转换为整数g
int h=0; //将b[bb]转换为整数h
int gg=1;//记录g的分母
int hh=1;//记录h的分母
if(!a.empty()){
for(int i=0;i for(int j=0;j a[i]=a[i]*10;
}
g=g+a[i];
}
}
for(int i=0;i gg=10*gg;
}
if(!b.empty()){
for(int i=0;i for(int j=0;j b[i]=b[i]*10;
}
h=h+b[i];
}
}
}
if(gg==1 && hh!=1){//循环小数:
hh=hh-1;
}
if(gg!=1 && hh!=1){//混小数:
int hhh=gg*hh;
hh=hhh-gg;
}
if(g!=0){
int yg=yuefen(g,gg);
g=g/yg;
gg=gg/yg;
}
if(h!=0){
int yh=yuefen(h,hh);
h=h/yh;
hh=hh/yh;
}
//两个分数约分相加
int k; //分子
int f; //分母
k=g*hh+h*gg;
f=gg*hh;
int ykf=yuefen(k,f);
k=k/ykf;
f=f/ykf;
cout<}return 0;}

刚入坑,代码还比较丑,但是,emmmm,还是可以通过的~~~小数化分数


第七城市th7cn

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台