来,先看题目: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()的时候当万分注意

最新文章

  1. ManualResetEvent知识总结
  2. Unity透明材质Batch
  3. AngularJS-chapter2-7-前端路由
  4. HttpRuntime应用程序的运行时
  5. ios-NSStringFromCGRect直接输出控件的frame
  6. javaSE第二十六天
  7. Orm图解教程
  8. zookeeper 客户端编程
  9. 【HDOJ】3033 I love sneakers!
  10. thinkphp3.2.3 成功对接支付宝接口
  11. 最新Android 出现Please ensure that adb is correctly located at问题的解决方法
  12. 限定只能处理&quot;A仓&quot;和&quot;B仓&quot;入库
  13. 改变Emacs下的注释代码方式以支持当前行(未选中情况下)的注释/反注释
  14. 【其他】MySql数据库的安装与卸载
  15. [LOJ3083][GXOI/GZOI2019]与或和——单调栈
  16. python回归分析
  17. jQuery 学习05——AJAX:定义、load()方法、get()/post()方法
  18. [JavaScript] Frequently used method or solutions for issues
  19. 再谈IE的浏览器模式和文档模式[转]
  20. eclipse热部署配置

热门文章

  1. Zabbix6.0使用教程 (一)—zabbix新增功能介绍1
  2. python 运算优先级
  3. JS传值与应用
  4. PhaApi NOTORM 实现分表分库
  5. 监控Windows(生成php木马)
  6. react 高效高质量搭建后台系统 系列 —— 脚手架搭建
  7. cs231n学习笔记——lecture6 Training Neural Networks
  8. HBase详解(03) - HBase架构和数据读写流程
  9. 使用C语言编程的7个步骤
  10. (9)go-micro微服务Redis配置