小数转化为分数

输入一个小于1的正小数,分别输出最简分数的分子和分母。

此代码的目的是简单快速的求出有限位小数对应的最简真分数。

C语言代码如下:

# include <stdio.h>
# include <string.h>

// 判断两个整数的最大公约数是否为1
int is_prime(int a, int b)
{
	while (a != b)
	{
		a>b?(a-=b):(b-=a);
	}
	return b;
}

int main(void)
{
	char ch[50];
	int a=0, b=1;
	int i = 0, flag=0,temp;
	gets(ch);
	// 读取尾数长度
	while (ch[i])
	{
		if (flag == 1)
		{
			a += (ch[i]-‘0‘);
			a *= 10;
	 		b *= 10;
		}
		if (flag==0 && ch[i]==‘.‘)
			flag = 1;
		i++;
	 }
	a /= 10;

	temp = is_prime(a,b);

	while (1 != temp)
	{
		a /= temp;
		b /= temp;
		temp = is_prime(a,b);
	}
	printf("%d %d\n",a,b);

	return 0;
 } 

原文地址:https://www.cnblogs.com/Robin5/p/11552715.html

时间: 2024-10-13 14:27:01

小数转化为分数的相关文章

将double小数转化成百分数字符串

double num = 0.9563; String numPersentage = num.ToString("P");

小数转化分数

这个算法的根本原理是:一个分数对应一条直线的斜率.用数学语言描述就是:一条直线的斜率是无穷大(垂直于X轴)或者是(Y2-Y1) / (X2-X1),我们要做的就是找到2个整数,在指定的精度范围内接近这个斜率.对于正数来说,我们设置分子为0,分母为1,然后比较这个分数同给定的十进制数.如果我们的分数太小了(比如,我们选择的点在直线的下面),我们就加大分子的值直到这个分数太大(比如,这个点在直线的上方),之后我们在增加分母的大小直到这个点在直线下方.如果我们的最终目标是无理数(无限不循环小数),这个

mysql 小数转换成百分数查出(保留两位小数百分数)

SELECT id as 'ID',GROUP_CONCAT(concat(truncate(royalties *100,2),'%')) as '比例' FROM yser FROM id in(1,3,4,5)GROUP BY id 如上面语句, TRUNCATE(X,D) 返回被舍去至小数点后D位的数字X.若D的值为0,则结果不带有小数点或不带有小数部分.可以将D设为负数,若要截去(归零)X小数点左起第D位开始后面所有低位的值.  所有数字的舍入方向都接近于零., concat 是将数值

中秋娱乐一下,来个小数转化为二进制的代码

1 #include<stdio.h> 2 int a[100]; 3 int main() 4 { 5 float n=0.17; 6 int index=0; 7 while(n) 8 { 9 float temp=n*2-1; 10 if(temp<0) 11 { 12 n=temp+1; 13 a[index]=0; 14 } 15 else 16 { 17 n=temp; 18 a[index]=1; 19 } 20 ++index; 21 } 22 23 int m=0; 2

MATLAB把小数转化为百分数形式输出

function B=percent(A) [m,n]=size(A); B=cell(m, n); A=round(A*10000)/100; for i=1:m for j=1:n B{i, j} =[num2str(A(i,j)),'%']; end end 转自http://www.ilovematlab.cn/thread-43204-2-1.html 原文地址:https://www.cnblogs.com/litthorse/p/9384622.html

样式转化

1. 转百分比 java控制器 json转百分比 NumberFormat number = NumberFormat.getPercentInstance(); number.setMaximumFractionDigits(0);//设置小数点后几位   double answerDurPre20Double = Double.parseDouble(vo.getAnswerDurPre20()); String answerDurPre20 =number.format(answerDur

关于强度

[关于强度] 首先,如何计算一个小数次幂?如3^1.6? 解法是将小数转化为分数,先整数幂乘,再开方.对上3^1.6,则是: 3^(8/5),就是先是3的8次方 再开5次根,约等于5.80. 在镜面反射公式中,有一个光强指定Value^Gloss.Value介于0~1之间.Gloss为一个0~任意大的数(通常不超常4),在其它公式中,通常称为强度.通过Gloss,可以控制镜面光斑的大小. 上左图为Gloss为0.1的函数图.右图为Gloss为4的函数图,可以看到同样的X值,Gloss越大,那么产

R语言基础编程技巧汇编 - 20

1.      RCurl设置代理 假设代理地址是10.10.10.10:端口是:8080. 设置代理地址如下: curl<-getCurlHandle(proxy="10.10.10.10:8080"); getURL("http://baidu.com",curl=curl) 2.      抓取网页中的表格 library(XML) library(RCurl) u ="http://en.wikipedia.org/wiki/List_of_

Python实现简单的四则运算

GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 20 · Estimate · 估计这个任务需要多少时间 10 10 Development 开发 360 600 · Analysis · 需求分析 (包括学习新技术) 30 40 · Design Spec · 生成设计文档 30