c++R 格式

问题描述

小蓝最近在研究一种浮点数的表示方法:RR 格式。对于一个大于 0 的浮点数 dd,可以用 RR 格式的整数来表示。给定一个转换参数 nn,将浮点数转换为 RR 格式整数的做法是:

  1. 将浮点数乘以 2n2n;

  2. 四舍五入到最接近的整数。

输入格式

一行输入一个整数 nn 和一个浮点数 dd,分别表示转换参数,和待转换的浮点数。

输出格式

输出一行表示答案:dd 用 RR 格式表示出来的值。

样例输入

复制代码
2 3.14

样例输出

复制代码
13

样例说明

3.14×22=12.563.14×22=12.56,四舍五入后为 1313。

评测用例规模与约定

对于 50%50% 的评测用例:1≤n≤10,1≤1≤n≤10,1≤ 将 dd 视为字符串时的长度 ≤15≤15。

对于 100%100% 的评测用例:1≤n≤1000,1≤1≤n≤1000,1≤ 将 dd 视为字符串时的长度 ≤1024≤1024;保证 dd 是小数,即包含小数点。

#include<bits/stdc++.h>

using namespace std;

int main()

{

int n;

string d; //数太大用字符数组读

cin>>n>>d;

vector<int>b; //开vetor好处就是可以用push_back进位的时候可以在后面直接加

int sum=0,k=0;

for(int i=d.size()-1;i>=0;i--)

{

if(d[i]!='.')

b.push_back(d[i]-'0'); //把字符型变成整数型

else {k=sum;}

sum++; //找到小数点位置为以后输出做铺垫,现在就可以看作一个大整数了

}

int u=b.size();

while(n--) //指数类型太大,保存不了,故每次*2

{

int t=0;

for(int i=0;i<b.size();i++)

{

b[i]=b[i]*2+t; //t是进位的数

if(b[i]>=10)

{

t=b[i]/10;

b[i]=b[i]%10;

}

else t=0;

}

if(t)

b.push_back(t);

} //模拟数学过程

u=b.size();

int t=1;

if(k&&b[k-1]>=5){ // 四舍五入过程

for(int i=k;i<u;i++)

{

b[i]=b[i]+1;

if(b[i]<=9){t=0;break;}

else b[i]-=10;

}

if(t) b.push_back(t);

}

for(int i=b.size()-1;i>=k;i--)

cout<<b[i];

return 0;

}

相关推荐
A7bert7771 分钟前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测
生成论实验室13 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
li16709027025 分钟前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
We་ct42 分钟前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
风筝在晴天搁浅42 分钟前
字节高频题 小于n的最大数
算法
LabVIEW开发1 小时前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序
AI科技星1 小时前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
skywalk81631 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
风筝在晴天搁浅1 小时前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
小书房1 小时前
Kotlin的by
android·开发语言·kotlin·委托·by