谷城网站开发,如何开办自己的公司,网站编辑没有经验可以做吗,商城网站推广方案题目描述#xff1a;
小蓝最近在研究一种浮点数的表示方法#xff1a;R 格式。对于一个大于 00 的浮点数 d#xff0c;可以用 R 格式的整数来表示。给定一个转换参数 n#xff0c;将浮点数转换为 R 格式整数的做法是#xff1a;
将浮点数乘以 2^n。四舍五入到最接近的整…题目描述
小蓝最近在研究一种浮点数的表示方法R 格式。对于一个大于 00 的浮点数 d可以用 R 格式的整数来表示。给定一个转换参数 n将浮点数转换为 R 格式整数的做法是
将浮点数乘以 2^n。四舍五入到最接近的整数。
输入格式
一行一个整数 n 和一个浮点数 d。
输出格式
一行一个整数表示 d 用 R 格式表示出的值。
输入输出样例
输入 #1
2 3.14
输出 #1
13
说明/提示
样例 1 解释
3.14×2^212.56 四舍五入后为 13。
数据规模与约定
用 t 表示将 d 视为字符串时的长度。
对于 50% 的数据保证 n≤10t≤15。对于全部的测试数据保证1≤n≤10001≤t≤1024保证 d 是小数即包含小数点。
解题思路
首先观察题目题目中的数据大小1024位明显大于整形变量值应当用string来存储。所以我们可以想到用高精度计算来解决这道题。
将浮点数d存储到字符串中去掉小数点后倒置方便计算接着进行相乘对每位进行相乘用数组存储。若数组数大于10就模10进位之后需要检查一下计算后是否有位数的改变。
之后进行四舍五入的判断判断之后需要检查进位以及位数是否发生变化最后再导致输出结果。
样例代码
#include iostream
#include math.h
#include vector
#include algorithm
using namespace std;
int n, arr[1000000], p, l;//数组开大一点
string q;
void cheng()
{for (int i 1; i l; i)//每一位乘arr[i] * 2;for (int i 1; i l; i)//进位{arr[i 1] arr[i] / 10;arr[i] % 10;}if (arr[l 1])//相乘可能会导致位数增加所以要检查大小l;
}
int main()
{cin n q;reverse(q.begin(), q.end());p q.find(.);q.erase(p, 1);//去掉小数点将小数点的位置设置为pl q.size();for (int i 0; i l; i)//字符串转换arr[i 1] q[i] - 0;for (int i 1; i n; i)cheng();if (arr[p] 5)//四舍五入arr[p 1];for (int i p 1; i l; i)//检查四舍五入后的进位{arr[i 1] arr[i] / 10;arr[i] % 10;}if (arr[l 1])//检查位数变化l;for (int i l; i p; i--)cout arr[i];return 0;
}