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){//指数超出尾数范围,后面补0for(int i=3;i<count1;i++){cout<<wei_shu[i];}for(int j=0;j<exponent+3-count1;j++){  //补齐0cout<<'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个0cout<<'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){//指数超出尾数范围,后面补0for(int i=3;i<count1;i++){cout<<wei_shu[i];}for(int j=0;j<exponent+3-count1;j++){  //补齐0cout<<'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个0cout<<'0';}cout<<wei_shu[1];for(int j=3;j<count1;j++){cout<<wei_shu[j];}}}

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南京观海微电子----时序图绘制工具

Wavedrom 是一款功能强大且简单易用的文本转图表工具&#xff0c;被广泛应用于生成时序图、波形图等交互式波形。其特点在于使用简单的文本语法&#xff0c;使得开发人员能够以可视化的方式表示数字信号和时间序列数据。Wavedrom 的优势在于其高度灵活性和可扩展性&#xff0c;…

【数据库】聊聊MySQL事务隔离级别与锁机制

概述 针对事务来说&#xff0c;其实主要解决的就是数据的一致性&#xff0c;对于任何的存储中间件来说&#xff0c;都会存在并发访问数据的问题&#xff0c;编程语言层面 juc、go等机制 使用编程上的方式&#xff0c;加锁、无锁编程等。而数据库也存在多个连接访问修改同一个数…

远程开发之端口转发

远程开发之端口转发 涉及的软件forwarded port 通过端口转发&#xff0c;实现在本地电脑上访问远程服务器上的内网的服务。 涉及的软件 vscode、ssh forwarded port 在ports界面中的port字段&#xff0c;填需要转发的IP:PORT&#xff0c;即可转发远程服务器中的内网端口到本…

24校招,得物测试开发工程师一面

前言 大家好&#xff0c;今天我来回顾一下之前参加的得物-测试开发工程师第一次技术面试 面试官上来跳过实习和项目经历&#xff0c;直接开始八股拷打&#xff0c;最喜欢这种简单直接的了&#xff0c;太好玩了 过程 自我介绍用的什么语言&#xff1f; Python&#xff0c;来…

openssl3.2 - 官方demo学习 - cms - cms_dec.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_dec.c概述笔记END openssl3.2 - 官方demo学习 - cms - cms_dec.c 概述 对用证书加密的CMS数据进行解密(也需要加密时用的那个证书) 笔记 /*! \file cms_dec.c * \note openssl3.2 - 官方demo学习 - cms - cms_dec.c 对用证…

将图片添加到 PDF 的 5 种方法

需要一种称为 PDF 编辑器的特定工具才能将图片添加到 PDF。尽管大多数浏览器在查看和注释 PDF 文件方面都非常出色&#xff0c;但如果您使用图像到 PDF 技术&#xff0c;则只能将照片放入 PDF 中。无需修改即可将 PDF 文件恢复为原始格式的能力是使用此类软件程序甚至在线服务的…

Doris 数据分布—Bucket(Tablet)

Doris 数据分布—Bucket(Tablet) 分桶的意义在于极大减少了数据的扫描范围、提高了查询的效率* 在 Doris 的存储引擎中,用户数据被水平划分为若干个数据分片(Tablet,也称作数据分桶)。每个 Tablet 包含若干数据行。各个 Tablet 之间的数据没有交集,并且在物理上是独立存…

[开发语言][c++]:Static关键字和全局变量

Static关键字和全局变量 1. 生命周期、作用域和初始化时机2. 全局变量3. Static 关键字3.1 面向过程3.1.1 静态全局变量3.1.2 静态局部变量&#xff08;单例中会使用&#xff09;3.1.3 静态函数 3.2 面向对象3.2.1 类内静态成员变量3.2.2 类内静态成员函数 Reference 写在前面&…

人机环境系统智能领域中的强度和角度

对于人工智能领域而言&#xff0c;强度和角度是两个重要的方面。 强度指的是人工智能技术的发展和应用程度。随着计算能力的提高和数据量的增加&#xff0c;人工智能在各个领域的应用正在不断增强。例如&#xff0c;深度学习和机器学习等技术的发展使得人工智能在图像识别、自然…

粒子物理和原子核物理的理论在模拟和分析电路中的粒子束和辐射效应中的应用

粒子物理和原子核物理的理论可以应用于模拟和分析电路中的粒子束和辐射效应&#xff0c;特别是在粒子加速器和辐射探测器的设计和优化方面。通过这些理论的应用&#xff0c;可以提高加速器和探测器的性能&#xff0c;推动粒子物理和原子核物理的研究进展。粒子物理和原子核物理…

OpenCV-24双边滤波

一、概念 双边滤波对于图像的边缘信息能够更好的保存。其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高斯函数相乘。 空间距离&#xff1a;指的是当前点与中心点的欧式距离。空间域的高斯函数及其数学形式为&#xff1a; 其中&#xff08;xi&#xff0c;yi&…

记redis5.x在windows上搭建集群(六主六从)

六个运行端口 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 1、安装redis,文章太多不多BB 2、复制六份redis文件夹出来改名 3、修改每一份的配置文件 redis.windows.conf 修改为以下格式&#xff1a; #运行端口 port…

kubeSphere DevOps部署vue项目

devops部署vue项目 &#x1f314;环境说明&#x1f30f;创建DevOps工程&#x1f30f;填写流水线信息&#x1f30f;创建流水线 &#x1f314;部署应用所需脚本JenkinsfileDockerfile &#x1f314;脚本一些参数如何设置说明&#x1f30f;deploy.yaml中的:imagePullSecrets:name属…

三、Qt Creator 使用

关于Qt的安装及环境配置&#xff0c;在我的上一篇《二、QT下载、安装及问题解决(windows系统)》已经讲过了。 本章节有一个重点&#xff0c;在新建 工程文件时&#xff0c;所在路径不要有中文&#xff0c;否则编译及运行程序不能正常运行。 在使用Qt Creator&#xff08;以下…

【电源专题】案例:ADC有两个量程,为什么选小量程而不用大量程?

案例背景:早期其他产品设计使用大量程3V ADC,但是外部的分压配置最大电压分压后仅仅只到1.6V左右,无法用到3V ADC量程。其主要原因是供应商提供说越往大量程走误差值越大,但正常的设计应该是要达到接近满量程(如文章:【电子通识】案例:采用电阻分压式采样电压的设计注意…

[GN] nodejs16.13.0版本完美解决node-sass和sass-loader版本冲突问题

项目场景&#xff1a; npm install 运行vue项目时候 问题描述 项目场景&#xff1a;sass-loader &#xff0c;node-sass出错 ! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: smoore-mes-web1.4.0 npm ERR! Found: webpack3.12.0 npm ER…

极简云源码已经开源

源码介绍 极简云已经开源 解绑卡密 查询卡密 总体来说还是很完善的 对接例子网盘里有 用户注册需要配置邮箱 上网页QQ邮箱标准版开启SMTP 然后生成授权码 后台发信邮箱里填就对了 实在不会配置邮箱的 可以下载网盘里的reg.php 把reg.php上传源码里的user目录 之后注册就不需要…

【操作系统】在阅读论文:OrcFS: Orchestrated file system for flash storage时需要补充的基础知

在阅读论文&#xff1a;OrcFS: Orchestrated file system for flash storage是需要补充的基础知识 这篇论文是为了解决软件层次之间的信息冗余问题 To minimize the disk traffic, the file system buffers the updates and then flushes them to the disk as a single unit, …

[脚本]油猴脚本简单入门

安装 科学上网后直接在谷歌商店安装 官方文档地址 文档地址 编写脚本 油猴自带的编译器非常不好用&#xff0c;不想麻烦配置编译器建议直接把内容拷贝到VSCode中进行编辑。 // UserScript // name New Userscript // namespace http://tampermonkey.net/ // v…

python爬虫02-requests库使用01

目录 1、requests库简介 2、requests库-安装 3、requests库-使用 3.1 导入模块 3.2 发送请求 3.3 requests库常用方法 3.4 访问控制参数kwargs 4、请求返回对象 Response 5、requests访问时的可能异常 1、requests库简介 requests是一个http的第三方请求库&#xff0…