当前位置: 代码迷 >> 综合 >> PAT乙级-1024 科学计数法 (20分)
  详细解决方案

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

热度:61   发布时间:2023-09-27 01:17:40.0

点击链接PAT乙级-AC全解汇总

题目:
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][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<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
using namespace std;int main()
{
    char num_in[19999]={
    };char num_out[19999]={
    };cin>>num_in;int index=1,index_out=0,e=0;bool flag_E=true;//save num into num_out before Ewhile (num_in[index]!='E'){
    if(num_in[index]>='0'&&num_in[index]<='9'){
    num_out[index_out++]=num_in[index];}index++;}//check the +- of Eif(num_in[++index]=='-') flag_E=false;index++;while (num_in[index]>='0'&&num_in[index]<='9'){
    e=e*10+num_in[index++]-'0';}//coutif(num_in[0]=='-')cout<<'-';if(e==0)cout<<num_out;else if(flag_E){
    //e>0e++;for(int i=0;i<strlen(num_out);i++){
    if(e-- == 0) cout<<".";cout<<num_out[i];}while(e-- >0)cout<<"0";}else{
    //e<0cout<<"0.";while(--e >0)cout<<"0";cout<<num_out;}
// cout<<endl<<"num_in= "<<num_in<<endl;
// cout<<"num_out= "<<num_out<<endl;return 0;
}

有的时候题目是一起做的,所以会有不需要的头文件

  相关解决方案