1024 科学计数法 (20 分)

1024 科学计数法 (20 分)_第1张图片
1024 科学计数法 (20 分)_第2张图片
这题想了好久,还是没有相出简单的方法,只能用最笨的方法了:
思路:
1.用字符串接收科学计数法数值
2.将整数及小数部分存到另一个字符串
3.判断指数为正还是为负
4.输出特殊情况(指数为0)
5.判断特殊情况(数字串长度大于指数)

#include
using namespace std;
// [+-][1-9].[0-9]+E[+-][0-9]+

//截取指定下标及之后的字符串
string subString(string s,int start,int end){
    string temp="";
    for(int i=start;i<end;i++){
        temp+=s[i];
    }
    return temp;
}
//查找字符在字符串中的下标
int getIndex(string s,int start,char c){
    for(int i=start;i<s.length();i++){
        if(s[i]==c){
            return i;
        }
    }
    return -1;
}
//将字符串转换为int型数据
int toInt(string s){
    int temp=0;
    int mul=1;
    for(int i=s.length()-1;i>=0;i--){
        temp+=mul*(s[i]-'0');
        mul*=10;
    }
    return temp;
}
int main(){
    string str="";//用来存字符
    string s="";
    cin>>s;
    if(s[0]=='-') cout<<"-";
    str+=s[1];
    s=subString(s,3,s.length());//去除小数点及之前的字符
    str+=subString(s,0,getIndex(s,0,'E'));//将小数点之前E之后的数字添加到字符串里
    s=subString(s,getIndex(s,0,'E')+1,s.length());//去掉E及前面的字符
    char flag=s[0];//指数的符号
    s=subString(s,1,s.length());//去掉指数的符号
    int zhishu=toInt(s);
    if(flag=='-'){//指数的符号为负号
        if(zhishu==0){
            cout<<str[0]<<"."<<subString(str,1,str.length());
            return 0;
        }
        zhishu-=1;
        cout<<"0.";
        for(int i=0;i<zhishu;i++) cout<<0;
        cout<<str;
    }else{
        if(zhishu==0){
            cout<<str[0]<<"."<<subString(str,1,str.length());
            return 0;
        }
        zhishu+=1;
        for(int i=0;i<zhishu;i++){
            if(i<str.length())cout<<str[i];
            else cout<<"0";
        }
        if(zhishu<str.length()){
            cout<<".";
            for(int i=zhishu;i<str.length();i++){
                cout<<str[i];
            }
        }
    }
    return 0;
}

你可能感兴趣的:(note-PTA乙级)