十进制小数转N进制(python)

时间:2025-02-20 11:34:00

文章目录

        • 题目描述
        • 输入
        • 输出
        • 样例
        • 知识点
        • 解析

题目描述

编写程序实现将任意10进制正小数m转换成n进制的正小数,小数点后保留10位小数。

输入

输入包含两个数m,n,用空格隔开。输入包含多组测试,当m,n都为0时输入结束。

Limits:

0.0000009<m<1
1<n<10
输出

输出10进制正小数m的n进制小数。结果保留10位小数。

样例

输入样例 1

0.795 3
0 0

输出样例 1

0.2101101122

先上代码:

import math


def func():
    def trans(num, specified_format) -> str:
        result = ''
        integer = math.floor(num)
        decimal = num - integer
        while integer >= specified_format:
            remainder = integer % specified_format
            integer /= specified_format
            result = str(remainder) + result
        result += str(integer)
        result += '.'
        counter = 0
        while counter < 10:
            decimal *= specified_format
            result += '{:.10f}'.format(decimal).split('.')[0]
            decimal -= math.floor(decimal)
            counter += 1
        return result

    while True:
        m, n = map(float, input().strip().split())
        if m == 0 and n == 0:
            break
        print(trans(m, n))


if __name__ == '__main__':
    func()

知识点
  1. 整数部分和小数部分的进制转换
  2. 取消默认使用的使用科学记数法
解析
  1. 小数的进制转换要分成整数部分和小数部分分别进行。整数部分很简单,就是对目标进制数取模得到余数添加到结果中,然后再除。而小数部分就要乘目标进制数,将整数部分添加到结果中,再对剩余的小数部分重复进行此操作,直到得到0或达到目标精度。
  2. 做题时遇到的问题是,如果decimal值比较小,如0.000001,那么就会被表示为1e-6,而不是纯数字。这个问题可以通过format解决。’{:.xf}’.format(num),就可以用纯数字表示。