来,先看题目:1024 科学计数法

分数 20 作者 HOU, Qiming 单位 浙江大学

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

我有两种解决方法,一种是随着读的过程就打印出来,一种是存在字符串里。废话不多说,先看代码

#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;cin>>a;
if(a[0]=='-')cout<<"-";
//int i;//i-2位数,小数i-3
int num;
int pos=a.find('E');
if(a[pos+1]=='-')num=(-1)*stoi(a.substr(pos+2));
else num=stoi(a.substr(pos+2));
int youxiaowei=-pos+3+num;
for(int i=0;i<pos;i++){
if(isdigit(a[i]))b=b+a[i];
}
int k=youxiaowei;
k=k+b.size();
if(youxiaowei<0){
if(k<=0){
cout<<"0.";
for(int i=0;i<-1*k;i++)cout<<"0";
cout<<b<<endl;
}
else{//测试点3,4 测试样例:+1.234E+01;
int cnt=0;
while(k-cnt!=0){
cout<<b[cnt++]; }
cout<<"."<<b.substr(cnt); }
}
else{
cout<<b;
for(int i=0;i<(youxiaowei);i++)cout<<"0";
cout<<endl;
} return 0;
}
// #include<bits/stdc++.h>
// using namespace std;
// int main(){
// string a,b;cin>>a;
// if(a[0]=='-')cout<<"-";
// //int i;//i-2位数,小数i-3
// int num;
// int pos=a.find('E');
// if(a[pos+1]=='-')num=(-1)*stoi(a.substr(pos+2));
// else num=stoi(a.substr(pos+2));
// int youxiaowei=-pos+3+num;
// for(int i=0;i<=pos;i++){
// if(isdigit(a[i]))b=b+a[i];
// }
// int k=youxiaowei;
// k=k+b.size();
// if(youxiaowei<0){
// if(k<=0){
// for(int i=0;i<-1*k;i++)b="0"+b;
// b="0."+b;
// }
// else{
// b=b.substr(0,b.size()+youxiaowei)+"."+b.substr(b.size()+youxiaowei);
// }//注意b.size()是一个无符号整数,如果它直接和另一个数相运算且结果小于0;则会出错测试点6
// }
// else{
// for(int i=0;i<(youxiaowei);i++)b+="0";
// }
// for(int i=0;b[i]=='0';){
// if(b.find('.')==1)break;
// else b.erase(0,1);
// }
// if(b!="")
// cout<<b;
// else cout<<0<<endl;
// return 0;
// }

总结:一个无符号整数,如果它直接和另一个数相运算且结果小于0。运算得到的结果就不是小于0,而是它的存储的补码所构成的无符号整数,是一个非常大的数。所以,使用size()的时候当万分注意

pat 乙级1024 科学计数法关于stl中size()的一些思考即测试点六,无符号整数问题的更多相关文章

  1. PAT乙级 1024. 科学计数法 (20)

    1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...

  2. PAT乙级 1024. 科学计数法 (20)(未通过全部测试,得分18)

    1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...

  3. PAT乙级 1024 科学计数法

    思路 1.尝试失败:一开始想打算把结果直接存在一个字符串中,后来发现当指数大于0的时候还需要分别考虑两种情况,工程量巨大,尝试失败,于是借鉴了其他大佬思路,写出了ac代码 2.ac思路:首先取指数的绝 ...

  4. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

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

  5. C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. PAT Bas ...

  6. PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)

    1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...

  7. PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)

    PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...

  8. PAT-乙级-1024. 科学计数法 (20)

    1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...

  9. P 1024 科学计数法

    转跳点:

  10. PAT——1024. 科学计数法

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位 ...

随机推荐

  1. 什么是NineData?突然就火了

    NineData 是集成了 SQL 开发.数据复制.数据备份.数据对比多个模块的云服务,支持混合云(自建库+云数据库的业务架构)和多云(多个不同云厂商数据库组成的业务架构)架构下的企业数据管理,大幅降 ...

  2. windows下django项目创建流程

    一.创建djangoa项目 1.将python39\Scripts 加入系统环境变量. 2.django-admin startproject 项目名称 二.设置setting 1.语言设置zh-ha ...

  3. MongoDB安全加固,防止数据库攻击删除勒索威胁

    前言: 今天发现前段时间自己搭建的一个系统的MongoDB数据找不到了,觉得很奇妙,然后登上MongoDB数据库发现多了一个名为READ__ME_TO_RECOVER_YOUR_DATA的数据库,里面 ...

  4. GO语言基础 为什么我要学习Golang以及GO语言入门普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.这系列文章入门部分将参考 ...

  5. elementui中 分页在vue中的使用

     template中: <el-pagination background layout="prev, pager, next" :total="total&quo ...

  6. vulnhub靶场之HACKABLE: III

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Hackable: III,下载地址:https://download.vulnhub.com/hackable/hackable3.ova,下 ...

  7. LFU 的设计与实现

    LFU 的设计与实现 作者:Grey 原文地址: 博客园:LFU 的设计与实现 CSDN:LFU 的设计与实现 题目描述 LFU(least frequently used).即最不经常使用页置换算法 ...

  8. Lombok中@Builder和@SuperBuilder注解的用法

    @Builder 是 lombok 中的注解.可以使用builder()构造的Person.PersonBuilder对象进行链式调用,给所有属性依次赋值. Person person1 = Pers ...

  9. [深度探索C++对象模型]关于成员初始化列表(member initiallization list)

    四种特殊情况: 1.当初始化一个reference member时. 2.当初始化一个const member时. 3.当初始化一个base class的constructor,而它拥有一组参数时. ...

  10. P5687 [CSP-S2019 江西] 网格图

    题面 给定一个 \(n\times m\) 的网格图,行从 \(1\sim n\) 编号,列从 \(1\sim m\) 编号,每个点可用它所在的行编号 \(r\) 与所在的列编号 \(c\) 表示为 ...