zoukankan      html  css  js  c++  java
  • 1024 科学计数法 (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

    现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

    输入格式:

    每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

    输出格式:

    对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

    输入样例 1:

    +1.23400E-03
    

    输出样例 1:

    0.00123400
    

    输入样例 2:

    -1.2E+10
    

    输出样例 2:

    -12000000000

    分析:首先判断E后是正还是负,正没有小数点加0,负继续进行判断
    这个题目比较麻烦的一点在小数点上,主要有三种情况
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
        string  a;
        char s1[10000];
        int s2[10000];
        cin>>a;
        int flag,i=1;
        int l=a.length();
        for(i=1;i<l;i++)
        {
            if(a[i]=='E')
            {
                flag=i+1;
                break;
            }
        }
        if(a[0]=='-')
        {
            cout<<a[0];
        }
        int k=0,j;
        for(int i=1;i<flag-1;i++)  //截取左边的数
        {
            if(a[i]!='.')
            {
                s1[k++]=a[i];
            }
        }
        s1[k]='';
        for(i=flag+1,j=0;i<l;i++)   //截取指数
        {
            s2[j++]=a[i]-'0';
        }
        int num=0;
    //    for(int i=flag+1,j=0;i<l;i++)  //可以直接求num,写的太麻烦了,又定义了一个数组存数字,费时费力
    //    {
    //        num=num*10+s2[i]-'0';
    //    }
        for(int i=0;i<l-flag-1;i++)
        {
            num=num*10+s2[i];
        }
     //   cout<<num<<endl;
        if(num==0)
        {
            if(a[0]!='+')
            {
                cout<<a[0];
            }
            cout<<s1;
        }
        else if(a[flag]=='+')
        {
            if(k-1>num)    //要判断左边小数点后的数字长度和指数是否相等
            {
                for(int i=0;i<num+1;i++)
                    cout<<s1[i];
                cout<<'.';
                for(int i=num+1;i<k;i++)
                    cout<<s1[i];
            }
            else if(k-1==num)   //如果相等不输出小数点
            {
                cout<<s1;
            }
            else
            {
                 cout<<s1;
                for(int i=0;i<num-1;i++)
                    cout<<'0';
            }

        }
        else
        {
                cout<<"0.";
                for(int i=1;i<num;i++)
                cout<<'0';
                cout<<s1<<endl;
        }
    }
    //分为三种情况,指数=0,指数>0,指数<0
    //指数>0又分为三种情况,指数和小数点后数字长度比较
  • 相关阅读:
    Java实现 LeetCode 56 合并区间
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
  • 原文地址:https://www.cnblogs.com/ygjojo/p/10759046.html
Copyright © 2011-2022 走看看