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.hqwc.cn/news/345037.html

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

相关文章

Danswer部署指南

Quickstart How to deploy Danswer on your local machine ​ Requirements gitdocker with compose (docker version > 1.13.0) ​ Setup This quickstart guide covers setting up Danswer for local execution Clone the Danswer repo: git clone https://github.com…

一款快速稳定的漏洞扫描工具【afrog】零基础入门到精通

工具介绍 afrog 是一款快速、稳定的高性能漏洞扫描器。支持用户自定义PoC&#xff0c;内置CVE、CNVD、默认密码、信息泄露、指纹识别、越权访问、任意文件读取、命令执行等多种类型。通过afrog&#xff0c;网络安全专业人员可以快速验证和修复漏洞&#xff0c;这有助于增强他们…

强化学习应用(二):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

mac 使用brew卸载node

1.查看当前的node版本 node -v 2.查看使用brew 安装的版本&#xff0c;可以看到本机装了14、16、18版本的node brew search node 3.卸载node brew uninstall node版本号 --force 如分别删除14、16、18版本的node命令如下 brew uninstall node14 --force brew uninstall no…

软考高级系统架构设计师考试经验分享

文章目录 1. 软考介绍&#xff08;1&#xff09;什么是软考&#xff08;2&#xff09;软考的作用&#xff08;3&#xff09;软考各科目的难度&#xff08;4&#xff09;考试时间&#xff08;5&#xff09;考试形式 2.系统架构设计师备考经验&#xff08;1&#xff09;辅导资料&…

谷粒商城-缓存使用分布式锁SpringCache(5天)

缓存使用 1.1.1 哪些数据适合放入缓存 即时性、 数据一致性要求不高的 访问量大且更新频率不高的数据&#xff08;读多&#xff0c; 写少&#xff09; 例如&#xff1a;电商类应用&#xff0c; 商品分类&#xff0c; 商品列表等适合缓存 本地缓存 使用Map进行本地缓存 本地缓存…

如何配置Kafka账号密码

背景 我们需要与第三方系统进行数据同步&#xff0c;需要搭建公网Kafka&#xff0c;Kafka默认是没有用户密码校验的&#xff0c;所以我们需要配置用户名密码校验。 配置 新增JAAS配置文件 在conf目录下新增kafka_server_jaas.conf文件&#xff0c;文件内容如下&#xff1a;…

基于SpringBoot的洗衣店管理系统

基于SpringBoot的洗衣店管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 可视化展示 用户界面 管理员界面 摘要 洗衣店管理系统基于Spring Boot框…

vue3-响应式基础之reactive

reactive() 还有另一种声明响应式状态的方式&#xff0c;即使用 reactive() API。与将内部值包装在特殊对象中的 ref 不同&#xff0c;reactive() 将使对象本身具有响应性&#xff1a; 「点击按钮1」 <script lang"ts" setup> import { reactive } from vuec…

js 中 复杂json 组装 实例通用模式

js 中 复杂json 组装 实例 目录概述需求&#xff1a; 设计思路实现思路分析1.js 中 复杂json 组装 实例2.js 中 复杂json 动态 组装 实例3.嵌套数组 参考资料和推荐阅读 ) Survive by day and develop by night. talk for import biz , show your perfect code,full busy&…

SpringBoot整合人大金仓数据库KingBase

1 去KingBase官网下载驱动jar包 2 将解压得到的所有jar包放置在libs目录下&#xff08;没有就新建一个目录&#xff09; 3 在pom文件添加相关依赖 <!--添加KingBase所需要的依赖--> <dependency><groupId>com.kingbase</groupId><artifactId>kin…

Stronghold Village

有了近2000个预制件和大量资产,您可以用基本的或先进的模块化预制件建造您的设防城镇或梦幻村庄,其中有许多定制选项和大量道具和物品 通过这个巨大的资源库,你可以创建村庄、城市、要塞、农村建筑、大教堂、城堡等。为你的环境提供高水平的细节,你可以创建外部装饰建筑,也…