//-------将小数转为最简分数------//
/* 输入的小数的格式为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;
}
分享到:
相关推荐
c#小数化最简分数算法: //小数化分数主函数 public static string XXtoBL(decimal XX) //求最大公约数的函数 public static int MaxY(int firstNumber, int secondNumber)
根据给定的信息,本文将详细解析“C小数转换分数的函数”的实现原理及过程。 ### 实现原理 #### 数学原理 此算法基于数学原理,即任何十进制数值都可以表示为分数形式,其中分子和分母均为整数。算法通过不断逼近...
将给定的小数转换为最简分数。 【输入形式】 从标准输入读入给定的小数。 输入有两种形式: 1. 有限小数,如2.12,5.69,0.618; 2. 无限循环小数,如0._1,3.5_142851,其中“_”后的数字表示循环节。 小数...
将给定的小数转换为最简分数。 【输入形式】 从标准输入读入给定的小数。 输入有两种形式: 1. 有限小数,如2.12,5.69,0.618; 2. 无限循环小数,如0._1,3.5_142851,其中“_”后的数字表示循环节。 小数部分...
C语言实现小数转分数,包括带循环节的小数
在给定的代码片段中,我们看到一个名为`Fraction`的函数,其目的是将任何实数(不仅仅是整除的情况)转换为其最简分数形式。下面,我们将深入探讨这个函数的工作原理、其内部结构以及实现这一转换的关键步骤。 ### ...
4. **约简分数**:转换得到的分数可能不是最简形式,需要通过最大公约数(GCD)来约简。例如,45/60的最大公约数是15,约简后得到3/4。 5. **处理浮点数精度问题**:由于计算机内部表示浮点数的精度限制,可能会...
将小数转换为分数,我们需要找到能够精确表示该小数的最简分数。对于有限的小数,这通常相对简单;但对于无限循环小数,可能需要进行无限近似。 以下是使用C#编写的一个基本小数转分数函数的步骤: 1. **确定小数...
分数转小数 代码
/// 小数转分数 /// /// <param name="inputnum"></param> /// <returns></returns> public static string GetFraction(double inputnum) /// /// 求最大公约数 /// /// <param name="num1">...
6. **约简分数**:最后,我们需要将找到的分数进行简化,即找到分子和分母的最大公约数(GCD),然后用它们相除,得到最简分数。 例如,对于0.333...,n=1,d=3,我们可以得到10 * x = 10 * 0 + 3 * 9,解得x = 3/9...
例如,将0.4、0.05、0.37、0.45和0.013等小数转换为分数,并确保是最简形式。 通过这样的学习过程,学生不仅能掌握小数化分数的基本技巧,还能培养他们的逻辑思维和问题解决能力。这对于他们未来在数学和其他科学...
3. **简化分数**:得到的分数可能不是最简形式,需要通过最大公约数(GCD)算法找到分子和分母的最大公约数,并进行约简。易语言提供了`求最大公约数`函数来计算GCD。 4. **处理负数**:如果原始小数是负数,那么...
注意处理边界情况,如0.0和负数,以及确保结果分数是最简形式。 6. **测试与调试**:编写好算法后,需要对各种边界条件和特例进行充分的测试,包括但不限于全0的小数、全1的小数、负数、正无穷、负无穷等,确保算法...
二、小数转化为最简分数 小数转化为分数首先需要找到合适的分母,通常选择10、100、1000等,使小数能被整除。例如,0.4可以写作4/10,然后简化为2/5;1.5可以写作15/10,简化后为3/2;0.25写作25/100,简化后为1/4;...
教学重点是分数与小数的相互转化方法,这包括如何将分数转换为小数(通过分子除以分母)以及如何将小数转换为分数(根据小数的意义,将小数转化为分母为10、100、1000等的分数,然后简化)。在实际操作中,学生会...
需要注意的是,当把小数转化为分数时,通常需要将其化为最简分数。而教材中的例题和练习题设计,特意选择了分母为10、100、1000等的分数和无限小数,以简化问题,便于学生理解和计算。 教学建议强调采用探究式学习...
这一步骤可以确保分数是最简形式。 4. **转换为小数**:为了将分数转换为小数,可以执行除法运算。在单片机环境下,可以直接使用除法指令或者模拟除法算法。对于简单情况,可以用分子除以分母得到结果。但是,...
- 加减法完成后,根据需要将结果简化为最简分数或转换为小数。 2. 乘法运算: - 分数和小数进行乘法运算时,可以先将小数转换为分数,然后根据乘法原则,分子乘分子,分母乘分母。 - 乘法的结果若是小数,则根据...
本文将深入探讨如何将MATLAB的分式输出转换为小数形式,以便于后续的计算和分析。 首先,我们要了解MATLAB的两种可能产生分式形式输出的情况: 1. **显示格式设置**:MATLAB提供了多种显示格式,包括短(short)、...