当前位置: 首页 > news >正文

蓝桥杯 R格式

问题描述

小蓝最近在研究一种浮点数的表示方法:R 格式
对于一个大于 0 的浮点数 d,可以用 R 格式的整数来表示。

给定一个转换参数 n,将浮点数转换为 R 格式整数的做法是:

  1. 将浮点数乘以 2^n
  2. 将结果四舍五入到最接近的整数。

输入格式

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


输出格式

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


样例输入

2 3.14

样例输出

13

样例说明

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


评测用例规模与约定

  • 对于 50% 的评测用例:
    1 ≤ n ≤ 10,d 的字符串长度 ≤ 15;
  • 对于 100% 的评测用例:
    1 ≤ n ≤ 1000,d 的字符串长度 ≤ 1024,保证 d 是小数(即包含小数点)。

c++代码

#include<bits/stdc++.h>
#include<stdio.h>

using namespace std;

int n;
string d;

string highmutiple(string a, string b) {
    if (a == "0" || b == "0") return "0";
    int m = a.size(), n = b.size();
    vector<int> aa(m), bb(n), cc(m + n, 0);
    for (int i = 0; i < m; i++) {
        aa[i] = a[m - i - 1] - '0';
    }
    for (int i = 0; i < n; i++) {
        bb[i] = b[n - i - 1] - '0';
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cc[i + j] += aa[i] * bb[j];
            cc[i + j + 1] += cc[i + j] / 10;
            cc[i + j] %= 10;
        }
    }
    string c;
    int k = m + n - 1;
    while(cc[k] == 0) k--;
    while(k >= 0) {
        c += to_string(cc[k]);
        k--;
    }
    return c;
}

string addone(string a) {
    int m = a.size();
    vector<int> aa(m + 1);
    for (int i = 0; i < m; i++) {
        aa[i] = a[m - i - 1] - '0';
    }
    aa[0]++;
    for (int i = 0; i < m; i++) {
        aa[i + 1] += aa[i] / 10;
        aa[i] %= 10;
    }
    string b;
    int k = m;
    if (aa[m] == 0) k--;
    while(k >= 0) {
        b += to_string(aa[k]);
        k--;
    }
    return b;
}

int main() {
    cin >> n >> d;
    string a = "1";
    while(n--) {
        a = highmutiple(a, "2");
    }
    int k = d.find(".");
    d.erase(k, 1);
    string ans = highmutiple(a, d);
    string zhen = ans.substr(0, ans.size() - (d.size() - k));
    if (ans[ans.size() - (d.size() - k)] >= '5') zhen = addone(zhen);
    cout << zhen;
    return 0;
}//by wqs

解题思路

高精度问题

计算的时候把小数点去掉,记录小数点后面有多少位。d有多少位小数,答案就有多少位小数

四舍五入只要判断小数点后的一位是不是比5大就行了。

相关文章:

  • Redis常见阻塞原因总结
  • 【JavaEE进阶】Linux搭建Java部署环境
  • 用Ollama部署大语言模型
  • ABAP隐藏F8执行按钮
  • Kafka是如何实现幂等性的??
  • redis安装
  • STM32__红外避障模块的使用
  • c++进阶之------红黑树
  • [特殊字符] 树莓派声卡驱动原理全解析:从模拟耳机口到HiFi DAC
  • 《鸿蒙原生应用开发:掌控Ability生命周期的艺术》
  • Chats-Grid迭代检索问答优化方案
  • 基于Python+Django的旅游管理系统
  • 学习笔记--基于Sa-Token 实现Java项目单点登录+同端互斥检测
  • #13【CVPR2024】“不确定性不是敌人”:深入剖析多模态融合中的不确定性
  • ✨【TFT屏幕与调试接口の冰火协奏曲】✨
  • 机器学习——Numpy矩阵与数值统计运算
  • Linux系统管理与编程10:任务驱动综合应用
  • Vue3中router最佳封装落地
  • 【第21节】windows sdk编程:网络编程基础
  • 服务器机柜托管的优势有哪些?
  • 秦洪看盘|平淡走势中或将孕育主旋律
  • 去年9月就提出辞任中国乒协主席,刘国梁谈辞职原因
  • 威廉·透纳诞辰250周年|他是现代艺术之父
  • 习近平同阿塞拜疆总统阿利耶夫会谈
  • 刘庆峰:关税对当前业务影响较小,有信心和底气在底座大模型上做到第一阵营
  • 叶辛秦文君进校园推广阅读