題目:
科學(xué)計(jì)數(shù)法是科學(xué)家用來表示很大或很小的數(shù)字的一種方便的方法佳窑,其滿足正則表達(dá)式[+-][1-9]"."[0-9]+E[+-][0-9]+,即數(shù)字的整數(shù)部分只有1位父能,小數(shù)部分至少有1位神凑,該數(shù)字及其指數(shù)部分的正負(fù)號即使對正數(shù)也必定明確給出。
現(xiàn)以科學(xué)計(jì)數(shù)法的格式給出實(shí)數(shù)A何吝,請編寫程序按普通數(shù)字表示法輸出A耙厚,并保證所有有效位都被保留。
輸入格式:
每個(gè)輸入包含1個(gè)測試用例岔霸,即一個(gè)以科學(xué)計(jì)數(shù)法表示的實(shí)數(shù)A薛躬。該數(shù)字的存儲長度不超過9999字節(jié),且其指數(shù)的絕對值不超過9999呆细。
輸出格式:
對每個(gè)測試用例型宝,在一行中按普通數(shù)字表示法輸出A,并保證所有有效位都被保留絮爷,包括末尾的0趴酣。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string s;
cin >> s;
int status1 = (s[0] == '+' ? 0 : 1);//判斷第一個(gè)符號
int status2 = (s[s.find("E") + 1] == '+' ? 0 : 1);
/*string.find()函數(shù)查找該字符串的位置*/
string index_s = s.substr(s.find("E") + 2, s.size() - s.find("E") - 2);
/*string.substr(m,n-m)取string中m到n這一段字符串(不包括n)*/
stringstream sstream;
sstream << index_s;
int index = 0;
sstream >> index;//轉(zhuǎn)換成數(shù)字
string num_s = s.substr(1, s.find("E") - 1);
if(status1 != 0){
printf("%c", '-');
}
if(status2 == 1){
for(int i = 0; i < index; ++i){
printf("%c", '0');
if(i == 0){
printf("%c", '.');
}
}
printf("%c", num_s[0]);
for(int j = 2; j < num_s.size(); ++j){
printf("%c", num_s[j]);
}
printf("%c", '\n');
}
else if(status2 == 0){
printf("%c", num_s[0]);
int count = 0;
for(int k = 2; k < num_s.size(); ++k){
if(count == index){
printf("%c", '.');
}
printf("%c", num_s[k]);
++count;
}
for(int l = 0; l < index - count; ++l){
printf("%c", '0');
}
printf("%c", '\n');
}
return 0;
}
代碼摘自FlyRush