2809.高精度二进制小数转十进制-预推免

通过数:18提交数:52学校:同济大学保研机试真题 题目列表 标签
高精度二进制小数转十进制-预推免 题目描述 给定一个合法的二进制小数字符串,格式为“整数部分.小数部分”,请将其转换为十进制数并输出。 小数部分可能表示普通有限二进制小数,也可能表示循环二进制小数。判定规则如下: 若小数部分可以由某个长度小于自身的非空二进制串完整重复若干次组成,则输入表示该最短重复串作为循环节无限重复的循环二进制小数; 否则,输入表示普通有限二进制小数。 例如,0.101010 的小数部分由 10 重复组成,因此表示二进制数 $0.\overline{10} 2$,其十进制值为 $\frac{2}{3}$;而 0.1101 的小数部分不存在更短循环节,因此按有限二进制小数计算。 由于小数部分长度可能超过常规浮点数的精度范围,不能直接使用浮点数转换,应通过字符串解析和高精度计算确保结果准确。 输入格式 输入为单个字符串,仅包含字符 0、1 和 .。 字符串仅含一个小数点,且小数点前后均至少有一位字符。整数部分和小数部分均仅由 0 和 1 组成。 无需处理无效输入。 输出格式 若输入表示普通有限二进制小数,则精确输出十进制表示的所有有效数字。末尾不输出多余的 0;若小数点后没有数字,则不输出小数点。 若输入表示循环二进制小数,则输出其十进制值,保留小数点后 $15$ 位;第 $16$ 位按四舍五入处理。进位可能影响整数部分。 输出结果禁止使用科学计数法,仅以“整数”或“整数.小数”形式呈现。 数据范围 小数部分长度 $1 \leq L \leq 200$。 输入样例1 0.1101 输出样例1 0.8125 输入样例2 10.101 输出样例2 2.625 输入样例3 0.1101110110 输出样例3 0.865234375 输入样例4 0.101010 输出样例4 0.666666666666667
C
补全
点击调试按钮即可调试代码。

点击提交按钮即可提交代码。