[CodeForces691C]Exponential notation

Posted lyfoi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CodeForces691C]Exponential notation相关的知识,希望对你有一定的参考价值。

Translate

给定一个长度为(N)的数字,转化为 标准的科学计数法形式。(N)最大可达(10^6)。要考虑前置(0) 和 后置 (0) 的特殊情况。 当指数为(0)的时候,不输出指数部分。

思路:

这个题典型的模拟题,注重思想,各种情况要考虑:
1.为0的情况

  • (0)

  • (00)

  • (0.0)
    2.没有小数点的情况
  • (16)

  • (100)

  • (001)

  • (1)
    3.带小数点的情况
  • (100.)
  • (100.00)
  • (01.00)
  • (1.010)
  • (12.1)
  • (00.0010)

这么麻烦吗?
其实我们可以用第一个和最后一个不为零的数字的位置 。 在处理一些特别坑的情况,就需要我们化繁为简的大法了! 具体看代码的注释!
代码还是简短的。

Code

//ps:毒瘤题,坑死人了! 
//注释可能有点文字上的错误
#include<bits/stdc++.h> //万能头文件 
using namespace std;
char s[1000005];//开大一点 

int main()
{
    cin>>s; 
    int n=strlen(s);
    int m=n,k=-1,l=n;
    //m表示点的位置,若输入中不含点则默认点在最后
    //k、l分别表示第一个和最后一个不为零的数字的位置 
    //至于为什么k=-1在下面2个原因,可以说这题的化繁为简之处就在k=-1上! 
    for(int i=0;i<n;i++)
    {
        if(s[i]=='.') 
            m=i;
         //如果发现小数点那么就记住 ,下面带来一个坑点:
         //经过我的测试竟然有,不止一个小数点!!!所以就留最后一个(神tm情况) 。 

        if(s[i]!='.'&&s[i]!='0'&&k==-1) k=i; 
        //我们要防止他不断更新,但是break不行!!!
        //因为我们此时可能还没找到点的位置! 这就是k=-1的一个原因 ! 
    }

    for(int i=n-1;i>=0;i--) 
    {
        if(s[i]!='.'&&s[i]!='0')
        {
            l=i;
            break;//这里找到后就可以直接跳出哦。 
        }
    } 
    if(k==-1) cout<<"0"<<endl;  
    //k=-1说明全为零或点,避免的量计算也是k=-1的另一个原因  
        else 
        {
            cout<<s[k];   //先输出第一个数字,也就是a 
            if(l!=k) cout<<".";   //说明不为零的数字不止一个,所以输出点 
            for(int i=k+1;i<=l;i++) 
            {
                if(s[i]!='.') cout<<s[i];   //输出后面的数字
                //注意虽然上面输出点了,但是不代表点被排除了!
            }
            int e;   //计算幂次 

            if(k>m) e=m-k;//点可能在k前后2个方向(小学数学) 
                else e=m-k-1;
            if(e!=0) cout<<"E"<<e<<endl;//注意e是否为0!e不为0 就输出e。 
                else cout<<endl;//e为0,处理完了! 
        }
    return 0;//完美结束 
}

以上是关于[CodeForces691C]Exponential notation的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow中moving average的正确用法

CloudKit 数据库 fetchRecordWithID 错误

codeforces上怎么看测试数据

如何看codeforces做了多少题

codeforces上怎么看测试数据

codeforces比赛后怎么看题解和答案