zoukankan      html  css  js  c++  java
  • CodeForces691C 【模拟】

    这一题的模拟只要注意前后导零就好了。。。
    感受就是。。。
    如果是比赛中模拟题打好。。要盯着注意点,测试不同的情况下的注意点。。起码要针对性测试10分钟。。
    还是蛮简单的,但是自己打烦了,应该,队友代码窝的一半。。。
    思路:
    还是搞成a*10^b,然后保证1<=a<10,b!=0;

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e6+10;
    char s[N];
    char a[N];
    char b[N];
    bool judge_special()
    {
        int num=0;
        int flag=0;
        int len=strlen(s);
        for(int i=0;i<len&&s[i]!='.';i++)
        {
            if(s[i]=='.') break;
            if(!flag&&s[i]!='0')
            {
                num++;
                flag=1;
            }
            else if(flag&&s[i]>='0'&&s[i]<='9')
                num++;
            if(num>1)
                return false;
        }
        if(num==1)
            return true;
        else
            return false;
    }
    void solve_special()
    {
        int i,j;
        int len=strlen(s);
        for(i=0;i<len;i++)
        {
            if(s[i]>='1'&&s[i]<='9')
            {
                printf("%c",s[i]);
                break;
            }
        }
        int k;
        for(j=len-1;j>i+1;j--)
        {
            if(s[j]!='0')
            {
                for(k=i+1;k<=j;k++)
                    printf("%c",s[k]);
                return;
            }
        }
    }
    int make_pre()
    {
        int num=0;
        int flag=0;
        int len=strlen(s);
        for(int i=0;i<len;i++)
        {
            if(s[i]=='.') break;
            if(!flag&&s[i]!='0')
            {
                num++;
                flag=1;
            }
            else if(flag&&s[i]>='0'&&s[i]<='9')
                num++;
        }
        return num;
    }
    bool judge_zero(int k)
    {
        int len=strlen(s);
        for(int i=len-1;i>k;i--)
        {
            if(s[i]!='0'&&s[i]!='.')
                return false;
        }
        return true;
    }
    void solve_pre(int num)
    {
        int i,j,k;
        int len=strlen(s);
        int flag=0;
        int flat=1;
        for(i=0;i<len;i++)
        {
    //        printf("aa
    ");
            if(s[i]=='.') break;
            if(!flag&&s[i]!='0')
            {
                printf("%c",s[i]);
                flag=1;
                if(judge_zero(i))
                {
                    printf("E%d",num-1);
                    return;
                }
                else
                {
                    printf(".");
                    for(j=len-1;j>i;j--)
                    {
                        if(s[j]!='0'&&s[j]!='.')
                            break;
                    }
                    for(k=i+1;k<=j;k++)
                    {
                        if(s[k]=='.') continue;
                        printf("%c",s[k]);
                    }
                }
            }
        }
        printf("E%d
    ",num-1);
    }
    void solve_next()
    {
        int len=strlen(s);
        int num=0;
        int k;
        for(int i=0;i<len;i++)
        {
            if(s[i]=='.')
            {
                k=i;
            }
            if(s[i]!='0'&&s[i]!='.')
                num++;
        }
        if(num==0)
        {
            puts("0");
            return;
        }
        if(num==1)
        {
            int sum=1;
            for(int i=k+1;i<len;i++,sum++)
            {
                if(s[i]!='0')
                {
                    printf("%cE-%d",s[i],sum);
                    return;
                }
            }
        }
        int flag=0;
        int sum=0;
        for(int i=len-1;i>k;i--)
        {
            if(s[i]!='0')
            {
                for(int j=k+1;j<=i;j++)
                {
                    if(!flag)
                        sum++;
                    if(!flag&&s[j]!='0')
                    {
                        printf("%c",s[j]);
                        flag=1;
                        printf(".");
                    }
                    else if(flag&&s[j]>='0'&&s[j]<='9')
                        printf("%c",s[j]);
                }
                printf("E-%d",sum);
                return;
            }
        }
    }
    
    int main()
    {
        scanf("%s",s);
        if(judge_special())
        {
            solve_special();
            return 0;
        }
        int num=make_pre();
    //    printf("%d
    ",num);
    
        if(num==0)
        {
            solve_next();
        }
        else
        {
            solve_pre(num);
        }
        return 0;
    }
  • 相关阅读:
    linux环境下安装nginx步骤
    时间戳—时间互转 java
    redis配置中踩过的坑
    在Windows端安装kafka 提示错误: 找不到或无法加载主类 的解决方案
    Windows平台kafka环境的搭建
    在windows上搭建redis集群(redis-cluster)
    身份证号打码隐藏
    PIL获取图片亮度值的五种方式
    Python文件排序
    PIL
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934756.html
Copyright © 2011-2022 走看看