美文网首页
PAT 1024 科学计数法 (20 分)

PAT 1024 科学计数法 (20 分)

作者: 昭明ZMing | 来源:发表于2018-12-15 17:33 被阅读0次
    #include <iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    int main() {
      char str[10000];
      scanf("%s",str);
      int len=strlen(str);
      if(str[0]=='-') printf("-");
      int pos=0;//存放E的 位置 
      while(str[pos]!='E') pos++;
      //指数 
      int exp=0;
      for(int i=pos+2;i<len;i++)
        exp=exp*10+(str[i]-'0');
      if(exp==0){//指数为零 
        for(int i=1;i<pos;i++) printf("%c",str[i]);
      }  
      if(str[pos+1]=='-')//指数为负 
      {
        printf("0.");
        for(int i=0;i<exp-1;i++) printf("0");
        printf("%c",str[1]);
        for(int i=3;i<pos;i++) printf("%c",str[i]);
      }
      else//指数为正 
      {
        for(int i=1;i<pos;i++){//输出移动后的数 
          if(str[i]=='.') continue;//跳过原小数点 
          printf("%c",str[i]);
          if(i==exp+2&&pos-3!=exp) printf(".");
        }
        for(int i=0;i<exp-(pos-3);i++) printf("0");//输出多余的 0
      }
        return 0;
    }
    

    方法2

    #include <iostream>
    #include <string>
    #include<string.h>
    using namespace std;
    int main(){
        string a, res;
        cin >> a;
        int k = 0;
        char ch = a[0];
        int flag = 0;
        while (a[k] != 'E') {            //记录有效数字
            if (strchr("+0.-", a[k]) == NULL)
                flag = 1;
            if (isdigit(a[k]) && flag) 
                res += a[k];
            k++;
        }
        int l = a.substr(a.find('.'), a.find('E')).length() - 3;   //记录小数位数
        int c = stoi(a.substr(a.find('E') + 1, a.length()));        //记录指数
        k = c - l;
        if (k < 0) {
            while (res.length() < abs(k))     //小数位补0
                res = '0' + res;
            res.insert(res.end() + k, '.');        //插入小数点
            if (res[0] == '.')                //若是小数之前还需补0
                res = '0' + res;
        }
        else {
            while (k--)            //整数末尾补0
                res += '0';
        }
        if (ch == '-')            //如果是负数还需补负号,切记正数不用
            res = ch + res;
        cout << res;
        return 0;
    }
    

    GitHub

    相关文章

      网友评论

          本文标题:PAT 1024 科学计数法 (20 分)

          本文链接:https://www.haomeiwen.com/subject/mcbahqtx.html