前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【优秀题解】题解 1178: 三进制小数

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

作者头像
编程范 源代码公司
发布2018-12-05 18:01:21
1.5K0
发布2018-12-05 18:01:21
举报
文章被收录于专栏:C语言及其他语言

你的任务呢,是将一个有理数转换成三进制小数。“什么是三进制小数呢?”你一定会问,这很明白,就是以三为基(二进制数以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”创作)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档