竞赛
考级
#include <bits/stdc++.h> using namespace std; int main() { double n; int m; cin >> n >> m; double a = n - floor(n); int d = 0; for(int i = 1; i <= m ; i++){ a = a * 2; d = floor(a); //取整 a = a - floor(a); //舍去整数部分 } cout << d; return 0; }
思路说明 题目要求:将十进制小数转换为二进制小数,并输出小数点后第 m 位的数值。 1. 问题的难点 十进制小数转二进制小数使用 “乘2取整” 方法:每次将小数部分乘以2,取整数部分(0或1)作为二进制位,再用新的小数部分继续乘2。 但是题目中输入的实数可能很长(如 10.123),直接使用浮点数会造成精度丢失,无法准确得到指定位。 因此需要精确模拟小数部分的乘2运算,而不依赖于浮点计算。
提交答案之后,这里将显示提交结果~