蓝桥杯省赛真题C++B组-2024R格式

一、题目

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

1. 将浮点数乘以 2^n;

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

输入格式
一行输入一个整数 n 和一个浮点数 d,分别表示转换参数,和待转换的浮点数。

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

样例输入
2 3.14
样例输出
13
提示
【样例说明】

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

【评测用例规模与约定】

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

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

二、思路

        我的想法很简单,把得到的数的整数部分和小数部分分离,如果小数部分>0.5,就加到整数部分,否则直接输出整数部分。

三、代码

#include<iostream>
#include<cmath> 
int main(){
	int n;
	double d;
	std::cin>>n>>d;
	long double num = pow(2,n)*d;
	int t = num;
	
	double f = num-t;
	if(f>0.5){
		long long endNum = num + 1;
		std::cout<<endNum;
	}else{
		std::cout<<t;
	}
	return 0; 
}

四、反思

精度范围

  • 对于 100% 的评测用例:浮点数  的长度最多为 1024 位。这是一个非常长的数字,远远超出了常规浮点数类型(如 float 或 double)的表示范围。常规的浮点数类型通常只能精确表示 15 到 17 位有效数字(字节的意思)(取决于语言和平台),而 1024 位的数字已经超出了它们的精度范围。
  • int 32位 8字节
  • long 32或64位 8字节
  • long long 32或64位 8字节
  • long double 128位 16字节

整型

数据类型通常位数取值范围
bool通常 1 位true 或 false
char8 位有符号:-128 到 127;无符号:0 到 255
signed char8 位-128 到 127
unsigned char8 位0 到 255
short(即 signed short16 位-32768 到 32767
unsigned short16 位0 到 65535
int(即 signed int通常 32 位-2147483648 到 2147483647
unsigned int通常 32 位0 到 4294967295
long(即 signed long至少 32 位,在 64 位系统通常为 64 位32 位系统:-2147483648 到 2147483647;64 位系统:-9223372036854775808 到 9223372036854775807
unsigned long至少 32 位,在 64 位系统通常为 64 位32 位系统:0 到 4294967295;64 位系统:0 到 18446744073709551615
long long(即 signed long long64 位-9223372036854775808 到 9223372036854775807
unsigned long long64 位0 到 18446744073709551615

浮点型

数据类型位数取值范围精度
float32 位大约 ±3.4×10^386 - 7 位有效数字
double64 位大约 ±1.7×10^30815 - 16 位有效数字
long double通常 80 位或 128 位比 double 更大比 double 更高

高精度算法

第十五届蓝桥杯C/C++B组题解——R格式_第十五届蓝桥杯c语言b组答案-优快云博客

是一种用于处理超出标准数据类型范围的数值计算的算法。它通过模拟手工计算的方式,使用数组或字符串来存储和操作大整数或高精度小数。以下是使用高精度算法的原因和优势:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值