小数转分数

本文探讨如何将小数转换为分数,讲解转换过程,并通过实例展示具体步骤。同时,提醒读者注意小数在转换过程中可能出现的溢出问题。
摘要由CSDN通过智能技术生成
// 小数转分数.cpp : 定义控制台应用程序的入口点。
//
/*
*	DJ.W 2013.4.19
*	问题描述:给定一个有限小数或无限循环小数,用分母最小的分数形式将其表示出来
*	输入	:任意小数 循环节用()括起来 如: 1.33(3)
*	输出	:4/3
*	算法思想:《编程之美》P148
*				提示; 设分数Y = 0.(c1c2c3...cm)
*						=> Y = c1c2c3...cm / (10^m - 1)
*	注:本算法还有一些问题:
		1.未考虑负数情况 这个可以预先判断 再调用本算法 最后结果加上负号即可
		2.未考虑溢出 当整个输入小数的数字位数大于9时(也就是整个输入除去"()"和"."剩下的位数),就可能会产生溢出。
					 当位数大于等于11时,必定会产生溢出。这在后面算法会看到。这可以通过使用64位整数或者自建一个
						大数数据结构来改进
*/

#include "stdafx.h"
#include<iostream>
using namespace std;
#include<string>

//设一个小数为a1a2a3...ak.b1b2b3...bn(c1c2c3...cm)
//a1a2a3...ak代表整数部分 b1b2b3...bn代表有限小数部分 c1c2c3...cm代表循环节。
typedef struct _decimal
{
	int limipart;	//将a1a2a3...ak.b1b2b3...bn * 10^n 得到的整数a1a2a3...akb1b1b3...bn
	int limipart_n; //有限小数部分的位数n
	int looppart;   //化整后的无限循环节部分c1c2c3...cm
	int looppart_len;//循环节的位数m
}decimal, *pdecimal;

//求a^n
int fact(const int a,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值