蓝桥杯 r格式(高精度*低精度)

news/2025/2/22 5:46:46

输入样例:2 3.14
输出样例:13

思路:首先注意到本题的数字大小很大,需要用到高精度,因此应该定义string来存储数据d,为了后续计算,在存储完字符串d之后还需要先将每一位转化为数字并且找到小数点在第几位,而数据2**n由于直接算出来会超范围,所以我们采取每次将d的每一位乘2 来算即可。

详见注释

#include<bits/stdc++.h>
using namespace std;   
int main()
{
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); //降低输入输出流 
  int n;
  string d; 
  cin>>n>>d;
  vector<int>b;  
  int sum=0,k=0;
  for(int i=d.size()-1;i>=0;i--)//注意这里是倒叙存储入 b 数组,否则后续进位不方便 
  {
      if(d[i]!='.')//判断是否是小数点 
        b.push_back(d[i]-'0');//把每一个字符转化为数字,方便后续乘法 ,这里如果用数组且下标不做改动的话b[k]会等于0,会对进位等过程有影响,但是我们这里用了vector是直接从后面加入数据的,所以原本小数点的位置现在存储 的就是整数部分的最后一位 
      else k=sum;  // 记录下小数点的位置,为了后续四舍五入 
      sum++;   
  }
  int u=b.size();
  while(n--) //由于2**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;//这里直接加 1 而不是 t 是因为两个个位数相加最终结果是小于20的,所以进位最多为 1 
           if(b[i]<=9){t=0;break;}
           else b[i]-=10;
      } 
    if(t) b.push_back(t);//如果一直循环到最后t还为1,那么就要最后进位 
  }
    for(int i=b.size()-1;i>=k;i--)//倒序输出 
      cout<<b[i];
  return 0;
}


http://www.niftyadmin.cn/n/5861679.html

相关文章

Flutter项目中设置安卓启动页

AndroidManifest.xml 设置 android:theme“style/LaunchTheme” <applicationandroid:label"string/app_name"android:name"${applicationName}"android:icon"mipmap/ic_launcher"android:roundIcon"mipmap/ic_launcher"android:t…

阿里云通过docker安装skywalking及elasticsearch操作流程

系统 本文使用系统为 Alibaba Cloud Linux 3.2104 LTS 64位 配置为 4核8G PS&#xff1a;最低配置应为2核4G&#xff0c;配置过低无法启动 安装docker 1.卸载旧版本docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-…

零基础学QT、C++(五)QT编译、导入OpenCV

目录 一、前言 二、准备工作 三、下载OpenCV包 四、包目录 五、版本匹配问题 六、QT导入OpenCV 七、手动编译OpenCV 1、导入项目&#xff08;他会加载很久&#xff0c;耐心等待&#xff09; 2、项目导入完成后&#xff0c;我们就可以开始构建 3、构建完成&#xff0c;就可以看看…

DuodooBMS源码解读之 equipment_work_order模块

Odoo 18 MrpWorkOrder 扩展模块用户使用手册 一、引言 本用户使用手册旨在帮助你了解并使用基于 Odoo 18 原生模块扩展的 MrpWorkOrder 模块。该扩展模块为制造工单管理提供了额外的功能&#xff0c;包括设备作业单关联、生产数量计算、检验合格数量统计等。通过本手册&#…

UI 自动化测试框架介绍

UI 自动化测试框架是用于模拟用户操作、验证界面功能和行为的工具。以下是一些常见的 UI 自动化测试框架,适用于不同的平台和技术栈: 1. Web UI 自动化框架 用于测试 Web 应用程序的 UI 自动化框架: Selenium: Java、Python、C#、JavaScript、Ruby 等。 : 支持多种浏览器(…

11、k8s的hpa和rancher

hpa hpa概念 hpa&#xff1a;自动对pod的数量进行扩缩容。 修改pod的数量&#xff1a; 1、手动——基于控制器——deployment statefulset(副本数) 2、自动扩缩容——基于资源限制的字段&#xff0c;达到阈值之后可以对pod的数量进行自动增加&#xff0c;小于阈值时可以自…

百度搜索,能否将DeepSeek变成“内功”?

最近&#xff0c;所有的云平台和主流APP都在努力接入DeepSeek。其中&#xff0c;搜索类APP与搜索引擎更是“战况激烈”。那么问题来了&#xff0c;接入DeepSeek已经变成了标准配置&#xff0c;到底应该如何做出差异化&#xff1f;接入DeepSeek这件事能不能实现11大于2的效果&am…

Redis复制性能优化利器:深入解析replica-lazy-flush参数

Redis复制性能优化利器&#xff1a;深入解析replica-lazy-flush参数 在Redis的主从复制场景中&#xff0c;你是否遇到过这些情况&#xff1f; 主从全量同步时从节点长时间不可用大数据量同步期间出现连接超时内存使用量在同步期间突然飙升 这些问题的解决方案可能就藏在repl…