六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 22|回复: 0

将小数转为最简分数

[复制链接]

升级  12.67%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
69
 楼主| 发表于 2013-1-26 12:36:24 | 显示全部楼层 |阅读模式
//-------将小数转为最简分数------///*  输入的小数的格式为0.ab(c)括号里面代表循环部分。    如果是有限小数的话:0.25=25*100,然后利用最大公约数的方法,对25/100进行化简;如果是循环小数的话:0.abcDEFDEF。。。。。。可以:         100*0.abcDEFDEF。。。。=abc.DEFDEF。。。。 100000*0.abcDEFDEF。。。。=abcDEF,DEFDEF。。。。*/#include<stdio.h>#include<math.h>//GCD函数是进行int GCD(int a, int b){int t;while(a % b != 0){t = a % b;a = b;b = t;}return b;}int  main(void){char a[15] = {-1};int n;int i;int sum = 0,sum2 = 0;int flag = 1;                                  //表示该小数是不是循环小数,flag=1代表不是循环小数int count = 1,count2 = 1;scanf("%d", &n);while(n--)                                     //输入n组测试数据{scanf("%s", &a);                            //输入要转化的数for(i=2; i<strlen(a); i++){if(a[i] == '(')                        //进行转换:将字符串转为整型数组{flag = 0;continue;}if(flag == 1 && a[i] != '('){sum = 10 * sum + a[i] - 48;count = count * 10;sum2 = sum;count2 = count;                                 }                       else{if(a[i] != ')'){sum2 = 10 * sum2 + a[i] - 48;count2 = count2 * 10;}else break;}}if(flag == 1){printf("%d/%d\n", sum / GCD(count, sum), count / GCD(count, sum));flag = 1;sum = 0;sum2 = 0;count = 1;count2 = 1;continue;}count2 = count2 - count;sum2 = sum2 - sum;printf("%d/%d\n",sum2 / GCD(count2, sum2), count2 / GCD(count2, sum2));flag = 1;sum = 0;sum2 = 0;count = 1;count2 = 1;}return 0;} 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表