PATクラスB1024科学的記数法

科学的記数法は、科学者が非常に大きい数または非常に小さい数を表すために使用する便利な方法です。これは、正規の式[+-] [1-9] .[0-9] + E [+-] [0- 9] +を満たします。つまり、数値の整数部分は1桁のみで、小数部分は少なくとも1桁です。正の数値の場合でも、数値の符号とその指数部分を明確に指定する必要があります。

これで、実数Aが科学的記数法の形式で与えられます。通常の数表現に従ってAを出力するプログラムを作成し、すべての有効な数字が予約されていることを確認してください。

入力フォーマット:

各入力には、科学的記数法で表された実数Aである1つのテストケースが含まれています。この数値のストレージ長は9999バイトを超えず、その指数の絶対値は9999を超えません。

出力フォーマット:

テストケースごとに、通常の数値表記に従ってAを1行に出力し、最後の0を含むすべての有効なビットが予約されていることを確認します。

入力例1:

+1.23400E-03

出力サンプル1:

0.00123400

入力例2:

-1.2E+10

出力サンプル2:

-12000000000


 

#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
    string s;
    int k,kk;
    while(getline(cin,s)) {
        int e=0,t;
        string shu="";
        if(s[0]=='+')k=1;
        else k=-1;

        for(int i=1; i<s.size(); i++) {
            if(s[i]=='E') {
                t=i;
                break;
            } else if(s[i]=='.'){
                continue;
            }else {
                shu+=s[i];
            }
        }
        if(s[t+1]=='+')kk=1;
        else kk=-1;
        for(int i=t+2; i<s.size(); i++) {
            e=e*10+s[i]-48;
        }
        //t-3就是点到e中有几个
        if(k==-1){
            cout<<"-";
        }
        if(kk==1){
            if(t-3<e){
                cout<<shu;
                e=e-t+3;
                while(e--){
                cout<<"0";    
                }
            }else if(t-3==e){
                cout<<shu;
            }
            else{
                for(int i=0;i<=e;i++){cout<<shu[i];}
                cout<<".";
                for(int i=e+1;i<shu.size();i++){cout<<shu[i];}
            }
            cout<<endl;
        }
        else if(kk==-1){
            cout<<"0"<<".";
            e=e-1;
            while(e--){
            cout<<"0";    
            }
            for(int i=0;i<shu.size();i++){cout<<shu[i];}
            cout<<endl;
        }
    }



}

 

おすすめ

転載: blog.csdn.net/paycho/article/details/84555990