【优秀题解】题解 1178: 三进制小数

你的任务呢,是将一个有理数转换成三进制小数。“什么是三进制小数呢?”你一定会问,这很明白,就是以三为基(二进制数以2为基,而十进制数则以10为基)的小数。

输入

有理数的值都是在0与1之间的,每个有理数都由一个分子和一个分母表示,分子与分母之间隔着一个斜杠。有理数的个数不会超过1000个。

输出

输出格式见样本输出,它是以小数点开头的具有10位精度的3进制数。

样例输入

1/3 1/4 1/6 7/8

样例输出

.1000000000 .0202020202 .0111111111 .2121212122

解题思路

1.输入分子x,分母y,求出x/y存入num;

2.根据小数部分进制转换思路:

(1):设转换进制为jinzhi=3进制;

(2):假设小数为1/4=0.25

①:0.25 * 3= 0.75 整数部分为0,小数部分为0.75

②:0.75 * 3= 2.25 整数部分为2,小数部分为0.25

③:0.25 * 3= 0.75 整数部分为0,小数部分为0.75

④:0.75 * 3= 2.25 整数部分为2,小数部分为0.25

.............

(3):把整数部分写下来为0202......这就是0.25转换为三进制后,对应小数点后面的数;

(4):我们假设精度为小数点后面三位,则0.25---->0.021,比方10进制数,大于等于5的进位,这里3进制数,就是大于等于1.5的进位,很显然0.0202保留三位小数就是 0.021;

(5):题目要求保留小数点后面10位,所上面求整数部分过程要求11次;

(6):最后进位(满3进1),注意:如三进制小数0.22222,要求保留4为小数的话,不是简单的向前面一位进1就结束,(因为进1后为0.2223,三进制是不能有3的,故满三还得进1);

参考代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

#include <stdio.h>

void output_three( double num );

int jinzhi = 3;//可换为其它进制

/*-----------------------------------------*/

int main()

{

int x, y;

double num;

while ( scanf( "%d/%d", &x, &y ) != EOF )

{

num = 1.0 * x / y;//乘1.0转化为浮点型

output_three( num );

}

return(0);

}

/*-----------------------------------------*/

void output_three( double num )

{

int A[11];

for ( int i = 0; i < 11; i++ )

{

num *= jinzhi;

A[i] = (int) num;

num -= A[i];

}

if ( A[10] >= 1.0 * jinzhi / 2 )//三进制的‘四舍五入’

A[9] += 1;

for ( int j = 9; j > 0; j-- )//进位,小数点后第一位为3时,不进到个位

{

if ( A[j] == 3 )

{

A[j - 1] += 1;

A[j] = 0;

}

}

printf( "." ); //输出结果

for ( int k = 0; k < 10; k++ )

printf( "%d", A[k] );

printf( "\n" );

return;

}

(本文为我站大神“ Manchester”创作)

原文发布于微信公众号 - 编程范(dotcpp)

原文发表时间:2018-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding迪斯尼

在未知长度的超大数组中线性时间内查找第k大的元素

给定一个长度为n的数组,n是一个很大的值,而且事先不知道n的大小,给定一个确定的数值k,要求设计一个找出数组中第k大的元素,要求算法需要的空间不能超过O(k)。

932
来自专栏用户画像

7.6.1 内部排序算法的比较

1、简单选择排序、直接插入排序和冒泡排序的平均情况下的时间复杂度都为O(n^2),并且实现过程比较简单,但直接插入排序和冒泡排序在最好的情况下时间复杂度可以达到...

662
来自专栏云霄雨霁

字符串排序----三向字符串快速排序

1860
来自专栏编程理解

排序算法(六):希尔排序

希尔排序是对插入排序的一种改进,也叫递减增量排序,算法过程中通过对增量值的递减调整,形成每一个增量值对应的一个或多个待排序分组,分别对分组执行插入排序,最后调整...

3551
来自专栏老九学堂

【干货】小白最容易放弃的二进制详解!

二进制,八进制,十六进制一直困扰着很多小伙伴,今天老九君就给小伙伴们讲解一下进制转化。 在计算机的世界里,只有0和1,也就是二进制。 我们如何把一个十进制的数转...

3716
来自专栏Golang语言社区

Golang语言社区--【基础知识】常量

常量是指该程序可能无法在其执行期间改变的固定值。这些固定值也被称为文字。 常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型。还有枚...

3617
来自专栏目标检测和深度学习

常用排序算法总结(1)

1252
来自专栏Golang语言社区

Golang语言社区--【基础知识】常量

常量是指该程序可能无法在其执行期间改变的固定值。这些固定值也被称为文字。 常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型。还有枚...

3265
来自专栏深度学习之tensorflow实战篇

python中list、array、matrix之间的基本区别

python科学计算包的基础是numpy, 里面的array类型经常遇到. 一开始可能把这个array和python内建的列表(list)混淆, 这里简单总结一...

76212
来自专栏Golang语言社区

Golang语言社区--【基础知识】常量

常量是指该程序可能无法在其执行期间改变的固定值。这些固定值也被称为文字。 常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型。还有枚...

34614

扫码关注云+社区

领取腾讯云代金券