1024 科学计数法

1024 科学计数法_第1张图片
1024 科学计数法_第2张图片

#include 
#include
using namespace std;

int main()
{
    string a;
    cin>>a;
    int len=a.length();
    int flag=1;
    int t=a.find("+",1);
    if(t==a.npos)
    {
        flag=0;
        t=a.find("-",1);
    }
    int tt=a.find(".",0);
    int flag1=1;
    if(tt==a.npos)
    {
        flag1=0;
    }
    int b=1;
    int c=0;
    for(int i=0;i<(len-t-1);i++)
    {
        c+=(a[len-i-1]-48)*b;
        b=b*10;
    }
    if(a[0]=='-'&&a[1]=='0'&&a[2]=='E')
    {
        cout<<"0";
    }
    else if(flag==0&&flag1==1)
    {
        if(a[0]=='-')
        {
            cout<<"-";
        }
        cout<<"0.";
        for(int j1=0;j1t-4)
        {
            cout<

别人:
分析:

本题处理起来确实麻烦,但你是不需要字符串函数来处理的。首先你需要找到E的位置,从E的位置+1往后计算指数大小EX,EX就表示需要在小数部分前或后加EX个0,然后判断第1个字符是不是负号,是则输出。再判定EX即0的长度是否为0,如果为0则输出从1开始到E之前位置的字符即可,如果EX不为0,则有如下两种情况:

1.EX>0

首先输出整数部分,然后需要判定小数部分长度和EX的大小,又分两种情况:

1.1 EX<小数部分长度

输出下标从3即小数部分第1个数字的位置开始EX个长度的字符,如果用for循环输出,假设循环变量为j,EX也即0的长度为len0,则条件为j=3,j<3+len0,j++,注意,3+len0不要写成j=j+len0!否则j的上限不断变化,到时候可能会越界!然后输出小数点,再输出小数点到E之间的部分,注意循环变量的初始值为3+len0

1.2 EX>=小数部分长度

先输出从下标3开始到E的部分,假设小数部分长度为D,则输出EX-D个长度的0

2.EX<0

先输出0和小数点,再输出EX-1长度的0,再输出原整数部分即第2个字符,再输出下标从3开始到E的部分

#include 
#include
using namespace std;

int main()
{
    string a;
    cin>>a;
    int len=a.length();
    int flag=1;
    int t=a.find("+",1);
    if(t==a.npos)
    {
        flag=0;
        t=a.find("-",1);
    }
    int tt=a.find(".",0);
    int flag1=1;
    if(tt==a.npos)
    {
        flag1=0;
    }
    int b=1;
    int c=0;
    for(int i=0;i<(len-t-1);i++)
    {
        c+=(a[len-i-1]-48)*b;
        b=b*10;
    }
    if(a[0]=='-'&&a[1]=='0'&&a[2]=='E')
    {
        cout<<"0";
    }
    else if(flag==0&&flag1==1)
    {
        if(a[0]=='-')
        {
            cout<<"-";
        }
        cout<<"0.";
        for(int j1=0;j1t-4)
        {
            cout<

你可能感兴趣的:(PAT乙级)