PAT乙级 1024 科学计数法
2024-10-20 16:23:04
思路
1.尝试失败:一开始想打算把结果直接存在一个字符串中,后来发现当指数大于0的时候还需要分别考虑两种情况,工程量巨大,尝试失败,于是借鉴了其他大佬思路,写出了ac代码
2.ac思路:首先取指数的绝对值,通过stoi函数可以将字符串数字直接转换成数字,然后再通过判断指数的正负,从而边判断边输出,十分简洁。
收获
1.输出可以随着判断进行,而不用全存入后,再输出
2.while里忽略的两个知识点,分别写在了代码注释里,注意:当while判断条件中出现循环体中的变量时,避免使用“++”,“--”等运算符在判断条件汇总
代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define rep(i,a,n) for(int i =a;i <= n; i++)
int main(){
string s;cin>>s;
int i = s.find('E');
if(s[0] == '-') cout <<"-";//输出符号
string p = s.substr(i + 2);//找到指数
int zh = stoi(p); //可以包含正负号,这里取的绝对值
// rep(i,0,(int)p.size()-1) zh = zh * 10 + (p[i] -'0');
if(s[i+1] == '+'){//指数是正的
cout << s[1];//先输出第一个
int j = 3;//输出指数让小数点移动的位数
while(j < i && zh > 0 ){
cout << s[j];
j++;zh--;
}
while(zh-- > 0)cout<<'0';
if(j < i){//前面数字没有输出完
cout<<'.';
while(j<i){//此处不可以写成j++ < i !!!会吞掉一位
if(s[j]!='.')
cout<<s[j++];
}
puts("");
}
}else{//如果指数小于0的话
zh--;
cout <<"0.";
while(zh--)cout<<'0';
rep(j,1,i - 1){
if(s[j]!='.')cout<<s[j];
}
puts("");
}
return 0;
}
最新文章
- mybatis常见易出错
- iOS三种正则表达式
- Jenkins+Maven+SVN快速搭建持续集成环境
- .NET使用Com组件的一点点教训笔记~
- Json在前台与后台之间的使用
- Java集合框架(二)
- js:jquery multiSelect 多选下拉框实例
- angularjs-xeditable整合typeahead完成智能提示
- HDU 2717(* bfs)
- WSS Process On Causal LTI System
- json数据转为Map集合
- 去掉UITabBar和NavigationBar上的黑线
- apache自带压力测试工具ab的使用及解析
- mysql问题处理积累
- 省赛在即!最大流问题回顾学习!!DInic
- selenium page object模式
- 构造函数constructor 与析构函数destructor(四)
- modelsim仿真中遇到的问题
- Hacknet 玩后感
- java初级易错问题总结