1069: 三进制小数

来源:互联网 发布:originlab软件下载 编辑:程序博客网 时间:2024/05/29 07:40

题目

Description

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

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

Output

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

Sample Input

1/3
1/4
1/6
7/8
Sample Output

.1000000000
.0202020202
.0111111111
.2121212122


代码块

import java.util.Scanner;//主要就是十进制转二进制一样,并取整,将取得的整数存入到数组中public class Main {    static double n = 0.0000000001;    public static void main(String[] args) {        Scanner cn = new Scanner(System.in);        int[] z = new int[10];        while (cn.hasNext()) {            String str = cn.next();            String[] s = str.split("/");            int a = Integer.parseInt(s[0]);            int b = Integer.parseInt(s[1]);            double num = (double) a / b;            System.out.print('.');            for (int i = 0; i < 9; i++) {                num *= 3;                z[i] = (int) (num + n);                num -= (int) (double) num + n;            }            num *= 3;            int an = (int) (double) (num + n);            num -= (int) (double) num + n;            if ((double) (num * 3 + n) >= 2 && an <= 1)                z[9] = an + 1;            else if ((double) (num * 3 + n) >= 2 && an >= 2) {//进行最后一位满三,向前进位                z[9] = an + 1 - 3;                z[8] = z[8] + 1;                if (z[8] >= 3) {                    z[8] = z[8] - 3;                    z[7] = z[7] + 1;                    if (z[7] >= 3) {                        z[7] = z[7] - 3;                        z[6] = z[6] + 1;                        if (z[6] >= 3) {                            z[6] = z[6] - 3;                            z[5] = z[5] + 1;                            if (z[5] >= 3) {                                z[5] = z[5] - 3;                                z[4] = z[4] + 1;                                if (z[4] >= 3) {                                    z[4] = z[4] - 3;                                    z[3] = z[3] + 1;                                    if (z[3] >= 3) {                                        z[3] = z[3] - 3;                                        z[2] = z[2] + 1;                                        if (z[2] >= 3) {                                            z[2] = z[2] - 3;                                            z[1] = z[1] + 1;                                            if (z[1] >= 3) {                                                z[1] = z[1] - 3;                                                z[0] = z[0] + 1 - 3;                                            }                                        }                                    }                                }                            }                        }                    }                }            } else {                z[9] = an;            }            for (int i = 0; i < 10; i++) {                System.out.print(z[i]);            }            System.out.println();        }    }}
0 0
原创粉丝点击