`

fzu 2065 数字判别(模拟题)

阅读更多


Problem 2065 数字判别 

Accept: 31    Submit: 81
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

现在kk 给你K-number的定义和一些字符串,想请你判断一下他们是否是K-number。

 

现在我们用digit表示一串连续的数字,中间没有任何符号。E或e表是指数。

那么数字就可以表示成:

K-number = digit

K-number = .digit

K-number = digit.

K-number = digit.digit

K-number = digit e/E digit

K-number = digit e/E +/- digit

K-number = .digit e/E digit

K-number = .digit e/E +/- digit

K-number = digit. e/E digit

K-number = digit. e/E +/- digit

K-number = digit.digit e/E digit

K-number = digit.digit e/E +/- digit

 Input

第一行一个整数T(1<T<=100000),表示有T组数据。

每组数据一行由数字字母正负号以及小数点组成的字符串,长度不大于10,其中没有空格。

 Output

对于每组数据,如果是K-number则输出该字符串否则不输出。

 Sample Input

2
123sd
33.E456

 Sample Output

33.E456
          题目大意:就是判断它是否是数字。上面有数字的表示形式的提示,然后就照着它模拟。又是一道模拟题,继续模拟模拟吧。下面有详细注释,不多说。
代码:
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;

char str[15];

bool judge()
{
    int i, len;
    int dot_pos, e_pos, s_pos;
    bool b_dot, l_dot, e_flag, s_flag, num_flag;
    char ch[15];
    strcpy(ch, str);
    len = strlen(ch);
    for(i = 0; i < len; i++)
    {
        if( !(ch[i] >= '0' && ch[i] <= '9'
           || ch[i] == '.'
           || ch[i] == 'e' || ch[i] == 'E'
           || ch[i] == '+' || ch[i] == '-') ) return false;
        /// 有不合法字符
    }
    b_dot = l_dot = false;
    e_flag = s_flag = false;
    num_flag = false;
    if(ch[0] == '.')    /// 有前置'.'
    {
        b_dot = true;
        for(i = 1; i < len; i++)    ///则将'0'去掉
        {
            ch[i-1] = ch[i];
        }
        ch[len-1] = 0;
    }
    len = strlen(ch);
    if(len == 0) return false;  ///'.'是不合法的

    for(i = 0; i < len; i++)
    {
        if(ch[i] == '.')
        {
            dot_pos = i;
            l_dot = true;
            break;
        }
    }
    if(b_dot && l_dot) return false;  /// 有两个'.'

    if(l_dot)   /// 有后置的'.'
    {
        for(i = 0; i < dot_pos; i++)    ///后置'.'之前的都是数字
        {
            if( !(ch[i] >= '0' && ch[i] <= '9') ) return false;
        }
        for(i = dot_pos + 1; i < len; i++)  ///判断后置'.'之后的
        {
            if(ch[i] == '+' || ch[i] == '-' || ch[i] == '.') return false;
            if(ch[i] == 'e' || ch[i] == 'E')
            {
                e_flag = true;
                e_pos = i;
                break;
            }
        }
    }
    else    /// 没有后置'.'
    {
        for(i = 0; i < len; i++)    /// 则后面 全部是数字 或 有e
        {
            if( !(ch[i] >= '0' && ch[i] <= '9') && !num_flag) return false;
            if(ch[i] >= '0' && ch[i] <= '9') num_flag = true;

            if(ch[i] == '+' || ch[i] == '-') return false;
            if(ch[i] == 'e' || ch[i] == 'E')
            {
                e_flag = true;
                e_pos = i;
                break;
            }
        }
    }

    if(e_flag)  /// 后面有e
    {
        if(e_pos + 1 >= len) return false;      /// 以e/E结束,错误

        /// 判断是否有+符号
        if(ch[e_pos+1] == '+' || ch[e_pos+1] == '-')
        {
            s_flag = true;
            s_pos =  e_pos + 1;
        }
        else s_pos = e_pos;

        if(s_flag)  /// 有+符号
        {
            if(s_pos + 1 >= len) return false;  /// 以符号结束,错误
            for(i = s_pos + 1; i < len; i++)
            {
                /// +符号后面只有数字,若不是则错误
                if( !(ch[i] >= '0' && ch[i] <= '9') ) return false;

            }
        }
        else    /// 没有+符号
        {
            for(i = s_pos + 1; i < len; i++)
            {
                if( !(ch[i] >= '0' && ch[i] <= '9') ) return false;
            }
        }
    }
    return true;
}

int main()
{
    int t;
    scanf("%d", &t);
    getchar();
    while(t--)
    {
        scanf("%s", str);
        if(judge()) printf("%s\n", str);
    }

    return 0;
}
 
0
2
分享到:
评论

相关推荐

    fzu online judge

    对于想要掌握这门技能的人来说,参加在线编程评测,如fzu online judge,是一个行之有效的途径。fzu online judge是一个面向编程爱好者和学习者的平台,提供了丰富的算法题目,供用户在线解答。这些题目虽然难度不一...

    fzu 1698解题报告

    求最大乘积 的源代码 次题是fzu 4月月赛题 是一道数学题啊

    2021FZU计算机视觉期末复习

    图像采样和量化是图像从模拟信号转为数字信号的过程中的两个基本步骤。图像量化将像素的连续值转换为离散值,使得每个像素由一个离散的灰度值表示。图像质量可以从灰度级、层次和对比度等多个维度进行描述。灰度级...

    福大fzu OJ题目

    不要下载此版的,请下载最新的http://download.csdn.net/source/1664620 离线版的福大acm在线评测OJ系统题目 更新到2009年8月 (注:chm电子书格式化)

    fzu大数据基础实验4

    fzu大数据基础实验4

    2021FZU计算机视觉作业(八)

    在计算机视觉领域中,灰度共生矩阵(GLCM)是一种用于纹理特征分析的技术。它通过计算图像中像素值的相对位置和分布来揭示图像的纹理特性,这些特性在图像分割、特征提取和图像分析等领域中非常有用。...

    2011 ACM 多校联合 2011 MU11 13 FZU

    【标题】"2011 ACM 多校联合 2011 MU11 13 FZU" 指的是一项编程竞赛,ACM(国际计算机学会)每年都会举办多场这样的竞赛,旨在提升学生的算法设计和编程能力。ACM竞赛通常包括一系列的编程题目,参赛队伍需要在限定...

    FZU飞跃手册 相关文件 (FZU Flying Book Relevant documents)

    这是关于我们飞跃手册项目的相关文档,包括成员分组信息表格,各组成员任务概要文档,项目日记等文档。 (This is a collection of documents relating to our Leapfrog Handbook project, including member ...

    FZU软件工程操作系统课程复习资料-整理

    FZU软件工程操作系统课程复习资料-整理 本资源摘要信息是关于FZU软件工程操作系统课程复习资料的整理,涵盖操作系统的基本概念、进程和线程、存储管理和文件系统等方面的知识点。 一、操作系统的定义和主要功能 ...

    FZU软件工程web课程复习资料-整理

    "FZU软件工程web课程复习资料-整理" 本资源是FZU软件工程web课程的复习资料,涵盖了web开发的基础知识和技术。下面是对该资源中所涉及的知识点的详细解释: 第一讲 web 开发概述 1. 因特网与万维网 因特网是一种...

    ACM数学_FZU绝密资料

    根据给定的文件标题“ACM数学_FZU绝密资料”及描述“ACM数学_FZU...............绝密..........”,我们可以看出这份资料主要聚焦于数学在ACM竞赛中的应用,尤其是在解决算法问题时数学理论的重要性。下面我们将从...

    C#作业(FZU)miniword完整版

    【C# miniword 完整版】是一款基于C#编程语言开发的小型文字处理软件,类似于微软的Word,主要用于FZU(福州大学)的教学与作业。该项目旨在让学生熟悉C#编程环境,掌握Windows Forms应用程序的开发技术,以及对文本...

    ACM半数集(FZU ACM上的半数集问题)

    FZU ACM 上的半数集问题 的源代码

    FZU2021计算机视觉慕课答案(一)

    FZU2021计算机视觉慕课是一门面向学生和研究人员的基础课程,其中包含了丰富的实践案例和练习题。从提供的文件内容中,我们可以提取一些计算机视觉中的基础知识点,包括图像的读取、显示、转换、保存、以及图像处理...

    fzu 1812 coin 背包

    1812 coin 解题代码 多重背包的应用

    fzu—java张苏老师课件

    《fzu—java张苏老师课件》是一个针对Java初学者的课程资料集合,由一系列PPT文件组成,包括了从基础到进阶的多个章节。这个资源旨在帮助初学者系统地学习Java编程语言,逐步掌握其核心概念和技术。下面我们将详细...

    2021FZU计算机视觉答案(五)

    标题“2021FZU计算机视觉答案(五)”表明本文档是一份关于计算机视觉题目的解答集,特别是涉及到与图像处理和分析相关的内容。从给出的部分内容来看,文档包含实现特定图像处理任务的Python代码示例,具体涉及到...

    FZU编译原理实践作业一参考代码

    仅作参考,抄被发现后果自负哈。

    FZU2021计算机视觉答案(四)

    FZU2021计算机视觉答案(四)中包含了肤色检测的实验过程和代码实现,以下是从该文件中提取出来的知识点: 1. **肤色检测的基本原理**: 肤色检测通常基于色彩空间中的色度或亮度属性,例如,在RGB色彩空间中,...

Global site tag (gtag.js) - Google Analytics