// 小数转分数.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,
小数转分数
最新推荐文章于 2021-02-13 12:27:48 发布
本文探讨如何将小数转换为分数,讲解转换过程,并通过实例展示具体步骤。同时,提醒读者注意小数在转换过程中可能出现的溢出问题。
摘要由CSDN通过智能技术生成