题目
题目描述:
小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 0 的浮点数 d,可以用 R 格式的整数来表示。给定一个转换参数 n,将浮点数转换为 R 格式整数的做法是:
- 将浮点数乘以 2n。
- 四舍五入到最接近的整数。
输入格式:
一行一个整数 n 和一个浮点数 d。
输出格式:
一行一个整数表示 d 用 R 格式表示出的值。
数据范围与说明:
样例 1 解释
3.14×22=12.56,四舍五入后为 13。
数据规模与约定
用 t 表示将 d 视为字符串时的长度。
- 对于 50% 的数据,保证 n≤10,t≤15。
- 对于全部的测试数据,保证 1≤n≤1000,1≤t≤1024,保证 d 是小数,即包含小数点。
输入输出样例 #1
输入:
输出:
题意
简述:
小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 0 的浮点数 d,可以用 R 格式的整数来表示。给定一个转换参数 n,将浮点数转换为 R 格式整数的做法是:
- 将浮点数乘以 2n。
- 四舍五入到最接近的整数。
代码
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include<bits/stdc++.h> using namespace std; int n,l; string d; int a[1000000]; void func(){ for(int i=1;i<=l;i++){ a[i]*=2; } for(int i=1;i<=l;i++){ a[i+1]+=a[i]/10; a[i]%=10; } if(a[l+1]){ l++; } } int main(){ cin>>n>>d; reverse(d.begin(),d.end()); int index=d.find("."); d.erase(index,1); l=d.size(); for(int i=0;i<l;i++) a[i+1]=d[i]-'0'; for(int i=1;i<=n;i++){ func(); } if(a[index]>=5){ a[index+1]++; } for(int i=index+1;i<=l;i++) { a[i+1]+=a[i]/10; a[i]%=10; } if(a[l+1]) l++; for(int i=l;i>index;i--) cout<<a[i]; return 0; }
|