pat甲级1073. Scientific Notation (20)、乙级1024. 科学计数法 (20)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/richenyunqi/article/details/79954040

欢迎访问我的pat甲级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981078

欢迎访问我的pat乙级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981369

题目描述

甲级题目描述

 

乙级题目描述

算法设计

用字符串s存储读取的科学计数法形式的字符串,利用字符串s1存储s中的小数部分(不存储小数点),利用int型变量 i 存储指数部分的值。按 i 的正负分两种情况讨论:

 

  1. i为负,这种情况一定会输出“0.000XXX”的形式,其中小数点后连续的0的个数为i-1,而后面XXX部分即为s1整个字符串
  2. i为正,分两种情况:如果i>=s1.size()-1,先输出s1整个字符串,然后输出i+1-s1.size()个0即可;否则输出s1整个字符串,并在输出s1的第i个字符之后输出一个小数点即可。

C++代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s,s1="";
    cin>>s;//读取输入的科学计数法形式的字符串
    if(s[0]=='-')//如果是负数先输出-号
        cout<<"-";
    int i=1;
    while(s[i]!='E'){//将小数部分删去小数点存储到s1字符串中
        if(s[i]!='.')
            s1+=s[i];
        ++i;
    }
    i=stoi(s.substr(++i));//将指数部分存储为一个整型变量
    if(i<0){//i为负,输出“0.000XXX”的形式,其中小数点后连续的0的个数为i-1,而后面XXX部分即为s1整个字符串
        cout<<"0.";
        i=abs(i)-1;
        for(int j=0;j<i;++j)
            cout<<"0";
        cout<<s1;
    }else//i为正,分两种情况
        if(i>=s1.size()-1){//如果i>=s1.size()-1,先输出s1整个字符串,然后输出i+1-s1.size()个0
            cout<<s1;
            for(int j=0;j<i+1-s1.size();++j)
                cout<<"0";
        }else//否则输出s1整个字符串,并在输出s1的第i个字符之后输出一个小数点
            for(int j=0;j<s1.size();++j){
                cout<<s1[j];
                if(j==i)
                    cout<<".";
            }
    return 0;
}

 

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭