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;即可转发远程服务器中的内网端口到本…

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

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

[开发语言][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 写在前面&…

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;以下…

[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, …

Seata TC端协调全局事务

1、Seata server注册器 //来自RM分支事务注册 super.registerProcessor(MessageType.TYPE_BRANCH_REGISTER, onRequestProcessor, messageExecutor); //开启全局事务 super.registerProcessor(MessageType.TYPE_GLOBAL_BEGIN, onRequestProcessor, messageExecutor); //提交全…

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; …

记录下载安装rabbitmq(Linux) 并整合springboot--详细版(全)

下载rabbitmq&#xff08;Linux&#xff09;&#xff1a; erlang压缩包&#xff1a; https://share.weiyun.com/TGhfV8eZ rabbitMq-server压缩包&#xff1a; https://share.weiyun.com/ZXbUwWHD &#xff08;因为RabbitMQ采用 Erlang 实现的工业级的消息队列(MQ)服务器&#…

五、带登录窗体的demo

做了一个简单的带登录窗体的demo&#xff0c;有用户名和密码不能为空的验证&#xff0c;原理是在main.cpp的主函数入口处&#xff1a; 1、将默认的MainWindow主窗体注释。 2、新建一个formlogin登录窗体&#xff0c;在主函数中先运行登录窗体。 3、在登录窗体中引用MainWind…

杨中科 .NETCORE EFCORE 第一部分 基本使用

一 、什么是EF Core 什么是ORM 1、说明: 本课程需要你有数据库、SOL等基础知识。 2、ORM: ObjectRelational Mapping。让开发者用对象操作的形式操作关系数据库 比如插入: User user new User(Name"admin"Password"123”; orm.Save(user);比如查询: Book b…

mac上部署单体hbase

1. 简介 HBase 是一个开源的、分布式的、版本化的典型非关系型数据库。它是 Google BigTable 的开源实现&#xff0c;并且是 Apache 基金会的 Hadoop 项目的一部分1。HBase 在 Hadoop Distributed File System (HDFS) 上运行&#xff0c;作为一个列式存储非关系数据库管理系统…

Flutter之运行错误:this and base files have different roots

运行时报错&#xff1a; this and base files have different roots: E:\Demolpro\waqu\build\flutter-plugin-_android_lifecycle and C:\Users\78535\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_pulgin_android_lifecycle-2.0.17\android 如图&#xff1a; 这种情况…

【JavaSE】P33~P113 方法,重载,数组,对象,构造器,this关键字,数组和对象的内存图,JavaBean

练习 1 方法方法定义及调用JShell简单使用&#xff08;要求Java9以上&#xff09;方法语句流程控制及注意事项选择循环 方法的重载 2 数组三种初始化方式数组在内存中的存储内存图 3 对象对象内存图Getter/Setter快捷写法this 关键字构造方法JavaBean的四个标准对象数组 二、编…