题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168

题解

第一遍也是没有全部AC,有3个测试点没过,原因如下:

  1. 没有处理指数为0的情况
  2. 指数为正时,没有处理不需补充0而需插入小数点的情况。(经过https://blog.csdn.net/whenever5225/article/details/90454014提示才知道的)

修改后全部都AC了。

整体的思路是获取整数和小数数值部分,然后获取指数,最后进行小数点的移动。

// PAT BasicLevel 1024
// https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168 #include <iostream>
#include <string>
using namespace std; int getExponent(string);
int main()
{
// 原始字符串和结果
string str,result;
cin >> str; // 获取结果的符号
string flag = (str[0] == '-' ? "-" : ""); // E在原始字符串中的下标
int eIndex = str.find_last_of('E'); // 获得指数的值
int exponent = getExponent(str.substr(eIndex + 1, str.length())); // 从原始字符串获取整数和小数部分的数值,现在小数点在result中的下标为1
result = str[1]+str.substr(3, eIndex-3); // 根据指数进行小数点的移动
if(exponent>0){
// 判断是否需要补充0
int numOfZero = exponent - (result.length() - 1); // 在尾部补充0
if(numOfZero>=0){
for (int i = 0; i < numOfZero; i++){
result += '0';
}
}
// 不需补充0,而是需要插入小数点
else{
result.insert(result.begin()+exponent+1,'.');
} }else if(exponent<0){
// 在首部补充0(for循环少补了一个0,这个少补的0在添加小数点时补上)
exponent*=-1;
for(int i=0;i<exponent-1;i++){
result.insert(result.begin(),'0');
} // 添加小数点
result="0."+result;
}else{
// 添加小数点
result.insert(result.begin()+1,'.');
} // 输出结果
cout << flag+result; //system("pause");
return 0;
} int getExponent(string str)
{
int flag=str[0]=='+'?1:-1;
int num=0;
for(int i=1;i<str.length();++i){
num=num*10+str[i]-'0';
}
return flag*num;
}

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


最新文章

  1. LINUX 下通过lsof恢复被误删除的文件
  2. google 提供webrtc 的实例使用 turnserver的方式
  3. plsql developer 导出导入存储过程和函数
  4. hdu 4336 Card Collector 容斥原理
  5. C#拓展练习之模拟键盘录入
  6. CentOS5.5 下编译安装 LAMP
  7. [CSS]文本属性(Text)
  8. Solr4.8.0源码分析(26)之Recovery失败造成的宕机原因分析
  9. 彻底卸载 RAD Studio 2009/2010/XE+ 的步骤
  10. 基于RSA的加密/解密示例C#代码
  11. JDK源码学习--String篇(四) 终结篇
  12. Python 初体验
  13. Linux Redhat 7.6 操作系统 下载安装详解
  14. java 生成txt文件
  15. 【转】接口测试Session/Cookie笔记(二)
  16. Windows7下搭建Eclipse+Python开发环境
  17. 数据库启动丢失MSVCP120.dll
  18. Struts2知识点小结(四)--拦截器与注解开发
  19. 最简单的bootloader的编写
  20. 汉罗塔问题——Python

热门文章

  1. 论文阅读 | Tackling Adversarial Examples in QA via Answer Sentence Selection
  2. vue项目自动构建工具1.0,支持多页面构建
  3. Less学习(1)
  4. 大数据之Zookeeper概述
  5. Java Volatile关键字(转)
  6. Linux中设置系统时间和时区
  7. poj 1064 求解最大化问题
  8. JS实现带省略号的长分页显示
  9. gRPC 和 C#
  10. C++ STL用法总结(持续更新)