PAT(Basic)乙級---1024(20 分) 科學計數法
阿新 • • 發佈:2018-12-17
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正則表示式 [+-][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
程式碼一:(第4測試點過不去不知道為啥)
#include <iostream> #include <math.h> using namespace std; int findE(string str,int N){ //找到字串E所在下標值 for(int i=0;i<N;i++){ if(str[i]=='E') return i; } } int main(){ string str; cin >> str; int length = str.length(); int index = findE(str,str.length()); int sum=0; int exp=0; for(int i=length-1;i>=index+2;i--){ //得到指數值 sum+=(str[i]-'0')*pow(10,exp); exp++; } //開始輸出 if(str[0]=='-') cout << "-"; if(sum==0){ //指數為0 for(int i=1;i<index;i++){ cout<<str[i]; } }else if (str[index+1] =='-'){ //指數為負 cout << "0."; for(int i=1;i<=sum-1;i++){ //補0 cout << "0"; } for(int i=1;i<index;i++){ if(str[i]!='.'){ cout<<str[i]; } } }else if(str[index+1]=='+'){ //指數為正 int k = index-3; //.到E之間數的個數 if(sum>=k){ //判斷移動位數是否大於小數個數 for(int i=1;i<index;i++){ if(str[i]!='.'){ cout<<str[i]; } } for(int i=1;i<=sum-k;i++){ //補0 cout<<"0"; } }else{ for(int i=1;i<index;i++){ //輸出輸出sum位數 ,然後輸出小數點 if(str[i]!='.') cout<<str[i]; if(i==sum+3) cout <<'.'<<str[i] ; } } } }
程式碼二:
#include<iostream> #include<cstring> #include<stdlib.h> using namespace std; const int maxn=10000; char s[maxn]; int main(){ memset(s,'\0',sizeof(s)); cin>>s; int len=strlen(s); int index_e=0; for(int i=0;i<len;i++){ //第一步 if(s[i]=='E'){ index_e=i; s[i]='\0'; break; } } int a=atoi(s+index_e+1),i; //第二步 //cout<<a<<endl; if(s[0]=='-') cout<<'-'; //細節 if(a==0) cout<<s+1; //第三步 else if(a>0){ int len1=index_e-2-1; if(a>=len1){ cout<<s[1]<<s+3; for(int i=0;i<a-len1;i++) cout<<0; }else{ cout<<s[1]; for(i=3;i-3<a;i++) cout<<s[i]; cout<<'.'<<s+i; } }else if(a<0){ a=-a; cout<<"0."; for(int i=0;i<a-1;i++) cout<<0; cout<<s[1]<<s+3; } return 0; }
參考:http://https://blog.csdn.net/qq_27474589/article/details/76104318
總結:
- 主要要找到E的位置並得到指數的大小。然後討論指數為0,正,負這三種情況,其中指數為正又分需要補零和不用補零兩種情況。