1024 科学计数法 (20)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:

每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

输入样例 1:

+1.23400E-03

输出样例 1:

0.00123400

输入样例 2:

-1.2E+10

输出样例 2:

-12000000000

 做了这么多PAT题目,我觉得做PAT的题目最简单的方法就是你将你的数学思想照猫画虎利用代码编写出来的正确率是最高的。

 脑子里面怎么想的我就用代码怎么编,我们没有那特别好的编程能力,那我们就别用那些高超的编程技巧,我们就按部就班一步一步将我们脑子里面想的编写出来就行了。

这也是我对于我的要求。

 我们来看这道题目:

科学计数法分为5个部分:

①尾数数符  ②尾数部分  ③'E'  ④指数数符  ⑤指数部分

这就是我们科学计数法表示的形式。

那这样也就要告诉我们,做这种题目需要分条件,每个条件都要考虑进去。

下面就是我的编写代码,虽然看着很多,但是我就是将我怎么想的挨个编写出来,你如果可以紧跟我的思路,一定是可以看懂的。

//完整代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    string kexue = "";
    cin >> kexue;
    char wei_shu[10001];  //存储尾数符号以及尾数部分
    int count1 = 0;          //尾数计数
    char zhi_shu[10001]; //存储指数符号以及指数部分
    int count2 = 0;          //指数计数

    for (int i = 0; i < kexue.length(); i++) {
        if (kexue[i] == 'E') {
            for (int j = 0; j < i; j++) {
                wei_shu[count1++] = kexue[j];
            }
            for (int m = i + 1; m < kexue.length(); m++) {
                zhi_shu[count2++] = kexue[m];
            }
            break;
        }
    }

    //计算指数的值
    string ex;
    for(int i=1;i<count2;i++){
        ex[i-1]=zhi_shu[i];
    }
    int exponent=stoi(ex);  //指数值


    //如果是负数先输出一个负号
    if(wei_shu[0]=='-'){
        cout<<'-';
    }

    //如果指数是正,则小数点往后移动;指数是负数小数点往前移动
    if(zhi_shu[0]=='+'){
        cout<<wei_shu[1];
        if(count1-3<=exponent){//指数超出尾数范围,后面补0
            for(int i=3;i<count1;i++){
                cout<<wei_shu[i];
            }
            for(int j=0;j<exponent+3-count1;j++){  //补齐0
                cout<<'0';
            }
        }
        else {
            for(int i=3;i<exponent+3;i++){
                cout<<wei_shu[i];
            }
            cout<<'.';      //输出小数点
            for(int j=exponent+3;j<count1;j++){
                cout<<wei_shu[j];
            }
        }
    }



    else {
        if(exponent==0){        //先判断指数为负,指数值为0的情况
            for(int i=1;i<count1;i++){
                cout<<wei_shu[i];
            }
        }
        else {
            cout<<"0.";              //首先输出0.
            for(int i=0;i<exponent-1;i++){  //在前面补exponent-1个0
                cout<<'0';
            }
            cout<<wei_shu[1];
            for(int j=3;j<count1;j++){
                cout<<wei_shu[j];
            }

        
        }

    
    }




    return 0;
}

 1.变量的定义与输入:

string kexue = "";             //我们输入的科学计数法形式
cin >> kexue;                   //输入
char wei_shu[10001];       //存储尾数符号以及尾数部分
int count1 = 0;                  //尾数计数
char zhi_shu[10001];        //存储指数符号以及指数部分
int count2 = 0;                    //指数计数

 2.分尾数与指数:

我们输入的是一个科学计数法形式,那尾数和指数是混在一起的,所以我们要将他们分开来,分割的标准就是’E‘左边是尾数部分,’E‘右边是指数部分。

for (int i = 0; i < kexue.length(); i++) {
    if (kexue[i] == 'E') {                //我们找出E的位置
        for (int j = 0; j < i; j++) {     //E左边是尾数
            wei_shu[count1++] = kexue[j];
        }
        for (int m = i + 1; m < kexue.length(); m++) {  //E右边是指数
            zhi_shu[count2++] = kexue[m];
        }
        break;
    }
}

 3.计算指数的int值:

  由于我们的尾数和指数定义的数组还是char类型的,所以我们在进行整合的时候是不太好进行的,所以我们需要将指数转化成int值。

//计算指数的值
string ex;               
for(int i=1;i<count2;i++){   //将指数部分放入string中
    ex[i-1]=zhi_shu[i];    
}
int exponent=stoi(ex);  //指数值

  其中stoi()函数是将string类型转化成int类型的重要函数,用的时候很方便。

 4.看尾数数符:

我们知道如果这个数是负的那我们首先应当输出一个负号,如果是正数那不需要输出正号。

//如果是负数先输出一个负号
if(wei_shu[0]=='-'){
    cout<<'-';
}

5.看指数数符:

  我们知道如果指数是一个正数,那么我们的小数点是要往右移动,如果指数是一个负数,那我们的小数点是往左边移动的。所以这要分情况。

  那我们考虑好这样的情况之后,如果尾数部分够小数点移动的,那我们只需要将小数点移动到那就行了,如果尾数不够小数点移动的,那我们需要在后面补0。

  接着我们再考虑指数为负的情况,如果指数是-0那我们仍然不需要移动小数点,如果不是-0那我们的小数点就需要往做移动了,所以我们需要在左边补0。

这就是我的大概思路,下面请看我这部分的代码:

//如果指数是正,则小数点往后移动;指数是负数小数点往前移动
if(zhi_shu[0]=='+'){
    cout<<wei_shu[1];
    if(count1-3<=exponent){//指数超出尾数范围,后面补0
        for(int i=3;i<count1;i++){
            cout<<wei_shu[i];
        }
        for(int j=0;j<exponent+3-count1;j++){  //补齐0
            cout<<'0';
        }
    }
    else {
        for(int i=3;i<exponent+3;i++){
            cout<<wei_shu[i];
        }
        cout<<'.';      //输出小数点
        for(int j=exponent+3;j<count1;j++){
            cout<<wei_shu[j];
        }
    }
}



else {
    if(exponent==0){        //先判断指数为负,指数值为0的情况
        for(int i=1;i<count1;i++){
            cout<<wei_shu[i];
        }
    }
    else {
        cout<<"0.";              //首先输出0.
        for(int i=0;i<exponent-1;i++){  //在前面补exponent-1个0
            cout<<'0';
        }
        cout<<wei_shu[1];
        for(int j=3;j<count1;j++){
            cout<<wei_shu[j];
        }

    
    }


}

 

   所有的内容都是我挨个挨个打上去的,所以有错别字也别骂我哦,最后可以要一个小小的赞嘛。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/315694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FineBI报表页面大屏小屏自适应显示问题

大屏正常显示 显示正常 小屏BI自适应显示 存在遮挡字体情况 小屏浏览器缩放显示 等比缩放后显示正常

C++结合OpenCV:图像的像素处理基础

像素是图像构成的基本单位&#xff0c;像素处理是图像处理的基本操作&#xff0c;可以通过位置索引的形式对图像内的元素进行访问、处理。 二值图像: 是一种特殊的灰度图像&#xff0c;在OPENCV中&#xff0c;将黑定义为0&#xff0c;255定义为白。 在OPENCV中&#xff0c;二值…

c++例题2点和直线关系

#include<iostream> #include<string> using namespace std; //圆的类 class yuan{ public:int x2 10;int y2 10;int r 5; }; //点的类 class dian{ public :void setx(int x){x1 x;}int getx(){return x1;}void sety(int y){y1 y;}int gety(){return y1;} pr…

Sqoop性能优化:高效数据传输的技巧

当使用Apache Sqoop进行数据传输时&#xff0c;性能优化至关重要。高效的数据传输可以减少任务运行时间&#xff0c;减轻集群负载&#xff0c;提高整体工作效率。在本文中&#xff0c;将深入探讨Sqoop性能优化的关键技巧&#xff0c;并提供丰富的示例代码&#xff0c;以帮助大家…

(学习日记)2024.01.09

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Github 2024-01-13 C#开源项目日报 Top8

根据Github Trendings的统计&#xff0c;今日(2024-01-13统计)共有8个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量C项目8 Redis - 内存数据库和数据结构服务器 创建周期&#xff1a;5411 天开发语言&#xff1a;C协议类型&am…

功效产品如何做好营销?媒介盒子解答

功能性产品目前的营销痛点就在于宣传夸张导致用户信任度降低&#xff0c;尤其是健康类产品&#xff0c;作为消费者&#xff0c;对此类产品大多持观望态度&#xff0c;但媒介盒子作为提供品牌宣传服务的团队&#xff0c;想和大家聊聊&#xff1a;功能性产品除了在功能上进行宣传…

Vue+ElementUI+Axios实现携带参数的文件上传(数据校验+进度条)

VueElementUIAxios实现携带参数的文件上传&#xff08;数据校验进度条&#xff09; 可以实现对上传文件的类型&#xff0c;大小进行数据校验&#xff0c;以及对上传文件所要携带的数据也进行的校验&#xff0c;也有文件上传进度的进度条。 一、Vue 结构部分 弹窗显示&#xff0…

Linux集锦大全【持续更新】

文章目录 Linux集锦大全【持续更新】Linux最常用的几个归档和压缩命令解压方法之一 tar语法压缩文件查看压缩文件的内容解压文件 解压方法之一 zip语法参数参考实例仅保存文件名 解压命令之一 unzip基本命令指定目录解压不解压某些文件 解压命令之一 gzip Linux最危险的几个命令…

crackmapexec工具详解

下载地址&#xff1a;https://github.com/Porchetta-Industries/CrackMapExec wiki&#xff1a;https://www.crackmapexec.wiki/ 1.安装&#xff08;MAC&#xff09; 1.1.python3.9 pipx 安装&#xff08;运行软件有警告&#xff0c;推荐 python3.11 pipx 安装&#xff09; …

准备好迎接新兴的汽车雷达卫星架构了吗?(TI文档)

引言 随着全球新车评估计划的安全等级和法规对主动安全功能的要求越来越严格&#xff0c;安全是当今车辆的一个不容置疑的特征。全球汽车制造商正在满足这些安全要求&#xff0c;并通过不断增强车辆内的高级驾驶辅助系统(ADAS)功能&#xff0c;包括自动紧急制动(AEB)、自适应巡…

鸿蒙HarmonyOS兼容JS的类Web开发

鸿蒙HarmonyOS兼容JS的类Web开发 文章目录 鸿蒙HarmonyOS兼容JS的类Web开发文件组织目录结构文件访问规则媒体文件格式 js标签配置pageswindow示例 app.js应用生命周期应用对象6 HML语法参考页面结构数据绑定普通事件绑定冒泡事件绑定5捕获事件绑定5列表渲染条件渲染逻辑控制块…

2024上半年教资笔试报名详细教程1月12日开始报名啦

重点提醒&#xff1a; 1、注册开放时间&#xff1a;2024年1月10日开始。 &#xff08;参加过笔试的考生&#xff0c;需要重新注册&#xff0c; 不影响已获得的笔试成绩。名额少的考点建议提前注册抢名额&#xff09; 2、网上报名时间&#xff1a;2024年1月12日至15日。 千万不…

机器人制作开源方案 | 基于混合现实的可移动机械臂平台

作者&#xff1a;董泽宇 李肖兵 叶彤 李秉宸 吴雅霏 单位&#xff1a;广西大学 电气工程学院 指导老师&#xff1a;李勇 雷圆媛 为应对特殊条件下不便于实地进行移动式操作的问题&#xff0c;本作品设计了一套基于混合现实的可移动机械臂操作控制系统。该系统分为人机交互、机…

【期末不挂科-C++考前速过系列P3】大二C++第3次过程考核(20道选择题&12道判断题&2道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C考前速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

Linux中断 -- 中断应答、嵌套、

接上文&#xff0c;本文继续介绍Linux软件部分逻辑。 参考内核版本&#xff1a;kernel-4.19 目录 1.中断信号在各级中断控制器中的应答 2.supports_deactivate_key意义 3.中断嵌套 1.中断信号在各级中断控制器中的应答 本章主要从内核软件层面来看各中断控制器对中断信号处…

self-attention机制详解

目前&#xff0c;对于我们的network&#xff0c;给定的input大都是一个向量&#xff1a; 但是对于更复杂的情况&#xff0c;我们的input是a set of vec: 举例&#xff1a; nlp中的句子&#xff0c;对于每个word都是一个word embedding&#xff1a; 图学习中每个节点有一个e…

SpringBoot3.X源码分析(启动流程)

SpringBootApplication(scanBasePackages {"com.javaedge.base"} ) public class BaseApplication {public BaseApplication() {}public static void main(String[] args) {SpringApplication.run(BaseApplication.class, args);} } 1 启动入口 静态辅助类&#x…

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

一、Cornerstone3D 是什么&#xff1f; Cornerstone3D官网&#xff1a;https://www.cornerstonejs.org/ 在线查看显示效果&#xff08;加载需时间&#xff0c;可先点击运行&#xff09;&#xff0c;欢迎fork 二、代码示例 了解了Cornerstone是什么&#xff0c;有什么作用后&…

SpringBoot3自动配置原理

​​​​​​自动配置 遵循约定大约配置的原则&#xff0c;在boot程序启动后&#xff0c;起步依赖中的一些bean对象会自动注入到ioc容器 看一下我们前面写的代码有没有达到自动配置的效果呢&#xff1f; 没有自动&#xff0c;我们写了配置类&#xff0c;写了Import注解&#…