【全网最细PAT题解】【PAT乙】1024 科学计数法

news2024/9/25 9:32:47

题目链接

1024 科学计数法

题目描述

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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

题目大意

给你一个科学计数法形式的数字,转化为正常形式

解题思路

个人感觉非常恶心的一个题,当时也是放了好久才做,属于那种看到题目就不想做的那种

  • 遇到的第一个问题是判断这个数字是否大于零,这个比较简单,只需要看最一开始的符号是正是负就可以了
  • 然后遇到的问题就是分别求出小数部分和阶数,因为有E这个字符的存在,所以我们可以先找到E,然后1i-1就是小数部分,i+1最后是阶数部分,用substr进行截断,拿题中所给的例子举例
    在这里插入图片描述
  • 还有个问题就是并保证所有有效位都被保留,包括末尾的 0且其指数的绝对值不超过 9999因为有这两条的出现,就导致想改成double类型直接进行运算是行不通的,必须用字符串来模拟小数点的移动,这里就回出现两个问题
    • 小数点左移时,一定会出现0.开头的情况
    • 小数点右移时,会出现两种情况
      • 小数点右移后还存在,这时候末尾的零还需要保留(1.23400123.400
      • 小数点右移后需要补零(1.234001234000)

总之需要满分此题还是有一定难度的,每一步在题解中都有比较详细的注释

题解

#include<bits/stdc++.h>
using namespace std;
int main(){
    string a;
    cin>>a;
    if(a[0]=='-') {
        cout << "-";
    }
    int i=0;
    while(a[i]!='E')	i++;
    string s=a.substr(1,i-1);       //相当于该数字
    string t=a.substr(i+1);             //相当于指数部分
    //substr的用法为
    //string类型变量.substr(开始截断的位置,结束截断的位置)
    //上面两行是从起始位置1(包括1)到位置i-1(包括i-1)
    //和起始位置i+1(包括i+1)到不填(默认最后位置)
    int y=stoi(t);
    if(y<0){
        //y小于零相当于小数点相左移,因为给定的整数部分只有一位,所以一定是0.开头
        cout<<"0.";
        for(int j=0;j<abs(y)-1;j++)	cout<<"0";
        //这里因为已经提前输出了一个0.了所以只需要输出y的绝对值(因为y小于0时才进入这个循环)减1个0,abs是绝对值的意思
        for(int j=0;j<s.length();j++){
            if(s[j]!='.')	cout<<s[j];
//            输出该数字除了小数点以外的所有位数
        }
    }
    else{
        //y大于零相当于小数点右移
        cout<<s[0];
        //因为第一位一定是非零的数字在小数点前,所以先输出第一位
        int cnt,j;
        for(j=2,cnt=0;j<s.length()&&cnt<y;j++,cnt++)	cout<<s[j];
        //这里有两种情况,所以在for循环中需要有两个判断条件
            //1.在小数点右移后,小数点还存在(比如1.234到123.4)
            //2.在小数点右移后,小数点不存在了(1.234到123400)
        if(j==s.length()){
            //这里代表小数点不存在了还要但是还要右移,这时候需要补零
            for(int k=0;k<y-cnt;k++)	cout<<"0";
        }
        else{
            //这里代表右移已经结束了,但是小数点还存在
            cout<<".";
            for(int k=j;k<s.length();k++)	cout<<s[k];
        }
    }
}

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

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

相关文章

Linux下安装Redis(云服务器)

一、选择自己需要下载的版本后&#xff0c;右击选择复制链接&#xff0c;然后利用命令进行下载&#xff0c;进入Xshell控制台&#xff0c;输入wget将复制的链接粘帖上 命令如下&#xff1a; wget https://download.redis.io/releases/redis-6.0.5.tar.gz 解压安装Redis解压 将下…

Pure Admin - 基于 Vue3 / Vite / Pinia 等主流技术栈打造的免费开源中后台管理系统,包含前后端源码

有一段时间没有推荐 admin 管理系统了&#xff0c;今天推荐一个完整度很高&#xff0c;教程详细&#xff0c;很容易上手的 admin 框架。 关于 Pure Admin Pure Admin 是一款开源免费且开箱即用的中后台管理系统模版&#xff0c;内置超多页面模板以及基于 node.js 的后端开发源…

金融信创步入快车道,应“需”而生的监控易运维方案为国产化助力

在我国“28N”信创三步走战略中&#xff0c;金融信创赫然名列其中&#xff0c;成为最早践行信创理论与实操的行业之一。截止到目前&#xff0c;金融信创渗透率业已仅次于党政部门&#xff0c;位列“8”大重点行业之首。超快的发展速度&#xff0c;让金融信创较早的步入“买方市…

Android 应用启动速度优化问题分析

在移动端程序中&#xff0c;用户希望的是应用能够快速打开。启动时间过长的应用不能满足这个期望&#xff0c;并且可能会令用户失望。轻则鄙视你&#xff0c;重则直接卸载你的应用。因此&#xff0c;App打开的速度的快慢是影响用户体验的重要因素之一。本篇文章主要为大家分享&…

电信网上营业厅用户自服务系统的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;本文在对目前各种网上营业厅的功能原理进行了分析后&#xff0c;在山西省移动公司实习期间&#xff0c;为保证电信网上营业厅系统中心数据库的安全&#xff0c;设计了一个具有三层结构的网上营业厅&#xff0c;以web页面方式实现了…

设计模式(十三)----结构型模式之桥接模式

1 概述 现在有一个需求&#xff0c;需要创建不同的图形&#xff0c;并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系&#xff1a; 我们可以发现有很多的类&#xff0c;假如我们再增加一个形状或再增加一种颜色&#xff0c;就需要创建更多的类。 试…

linux_实操篇

linux_实操篇]六、Linux远程登录6.1为什么linux要远程登录6.2远程登录linux-Xshell76.3远程上传下载文件-Xftp76.3.1解决中文乱码七、vi与vim编辑器7.1vim快速入门7.1.1基本介绍7.1.2 vi与vim常用三种模式7.1.3vi和vim基本使用7.2vi和vim快捷键7.2.1 快捷键练习八、linux的开机…

Linux MISC 驱动实验

目录 一、MISC 设备驱动简介 misc_deregister 函数 二、MISC驱动编写 1、编写框架 2、platform结构体对应的函数 2、宏定义和miscbeep设备结构体 3、定义miscdevice结构体 字符设备操作集 4、probe函数 5、remove函数​编辑 验证 6、添加开关 三、总代码 APP mis…

MySQL-锁

MySQL-4-锁概述锁的分类全局锁基本语法&#xff1a;特点表级锁介绍分类表锁读锁测试写锁测试写锁测试元数据锁意向锁分类行级锁介绍行锁间隙锁/临键锁概述 锁是计算机协调多个进程或者线程并发访问某一资源的机制&#xff0c;在数据库中&#xff0c;除传统的计算资源&#xff…

PCB第六道主流程之AOI,你都知道吗

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第六道主流程为AOI。 AOI的目的为&#xff1a; 利用光学原理&#xff0c;比对资料&#xff0c;进行检验&#xff0c;并附带相应的维修与报废处理。 其子流程&#xff0c;主要为3个。 【…

面试必刷101 Java题解 -- part 3

part1 – https://blog.csdn.net/qq_41080854/article/details/129204480 part2 – https://blog.csdn.net/qq_41080854/article/details/129224785 面试必刷101 Java题解 -- part 3动规五部曲71、斐波那契数列72、跳台阶73、最小花费爬楼梯74、最长公共子序列(二)75、最长公共…

比特数据结构与算法(第四章_中_续②)堆解决Topk问题(最小的k个数)

TopK问题介绍&#xff1a;在N个数中找出最大/小的前K个 &#xff08;比如在1000个数中找出最大/小的前10个&#xff09;以前的方法&#xff1a;冒泡排序。时间复杂度&#xff1a; O(N^2)现在找最大的k个数的方法&#xff1a;方法1&#xff1a;堆排序降序&#xff0c;前N个就是最…

提高香港数据中心安全性的 5 种方法

在说明如何有效提高香港数据中心安全性之前&#xff0c;让我们快速了解什么是香港数据中心&#xff0c;以及为什么它对任何企业都很重要。 什么是香港数据中心? 无需深入研究复杂的术语和过多的细节&#xff0c;香港数据中心只是负责保存公司大量敏感或专有信息的设施&#xf…

使用gitee搭建图床,并解决防盗链问题

使用gitee搭建图床&#xff0c;并解决防盗链问题 一、搭建图床&#xff08;图床—般是指储存图片的服务器&#xff09; 1、有gitee账号&#xff0c;并搭建一个gitee仓库 点击新建仓库&#xff1a; 填写信息&#xff1a; 新建完就是这个模样了&#xff0c;点击管理&#xff1…

RFID射频卡写入手机NFC心路小记

声明&#xff1a; 本文仅是作者学习探索的心里路程日记&#xff0c;如果您看完以后&#xff0c;从中获得了一些知识&#xff0c;作者不胜荣幸。科技是一把双刃剑&#xff0c;利用好了&#xff0c;可以方便生活&#xff0c;利用不当也肯能扰乱公共管理秩序&#xff0c;造成不必要…

【软件测试】测试老鸟的迷途,进军高级自动化测试测试......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 很多从业几年的选手…

如何在没有任何额外包的情况下使用 NodeJS 下载文件

如何在没有任何额外包的情况下使用 NodeJS 下载文件 您可以下载文件&#xff08;图像、文本或任何类型的文件&#xff09;并使用 NodeJS 内置 https和 fs模块将其保存到您的文件系统。 该 https模块允许您使用 NodeJS 创建 HTTPS 请求&#xff0c;同时该 fs模块授予您访问文件…

VR全景的普及还将会带来什么新的风口?

5G技术的普及让VR全景在诸多行业中逐渐融合应用&#xff0c;VR全景展示可以更加真实、更加直观地让用户自主观看现场真实场景&#xff0c;基于身临其境的效果&#xff0c;VR全景展示已经被广泛的应用于各行各业&#xff0c;那么VR全景的普及还将会带来什么新的风口呢&#xff1…

FAST‘23《λ-IO: A Unified IO Stack for Computational Storage》论文解读

FAST’23《λ-IO: A Unified IO Stack for Computational Storage》论文解读 Data:2023-2-27 Ref: Z. Yang et al., “λ-IO: A Unified IO Stack for Computational Storage,” in 21st USENIX Conference on File and Storage Technologies (FAST 23), Santa Clara, CA, Feb.…

我的Android前沿技术—— Artifactory私服 搭建

我们说的私服&#xff0c;其实指的是企业局域网内的软件包依赖库。 说到软件库&#xff0c;就会牵扯出另一个概念——包管理器。 包管理器是在电脑中自动安装、配置、卸载和升级软件包的工具组合。包管理器由于其便捷性&#xff0c;被越来越多的新技术所采纳&#xff0c;从老…