Advertisement

上海计算机学会2020年4月月赛C++丙组T4数字验证

阅读量:

该任务是对一串字符进行浮点数合法表示的验证。具体要求包括:
符号(+ 或 −)最多只能出现在第一个字符且最多只有一个
可以有小数点但最多只有一个
整数部分或小数部分可以省略但不能同时省略
输入为可见字符组成的字符串,需满足上述条件才能被视为合法表示(Valid),否则为非法表示(Invalid)。解析过程中模拟了对字符串各字符的遍历与检查逻辑,并通过多个样例测试了不同情况下的判断结果。

数字验证

内存限制: 256 Mb时间限制: 1000 ms

题目描述

判断所给的一串字符是否符合浮点数合法表示的标准;浮点数的有效表示必须遵循特定格式要求

允许使用加号或减号 - 或 + 作为标记 - 每个符号仅限于一个;支持包含小数点 - 点最多只有一个 - 整数值可选、小数值也可选;两者不可同时缺失。

输入格式

一定数量的字符用于表示待验证的一个字符串,在此过程中必须确保所有字符均为可识别的字符,并且排除了任何空白或换行符的存在。

输出格式

如果输入是一个浮点数的合法表示,输出 Valid,否则,输出 Invalid

数据范围

设输入的字符数量为 n,有 1≤n≤5000。

样例数据

输入:
+3.1415926
输出:
Valid
输入:
1.0e10
输出:
Invalid
输入:
-25.
输出:
Valid(Negative number -25)
输入:
. (Decimal point)
输出:
Invalid(Decimal point alone is invalid)
输入:
-. (Minus sign)
输出:
Invalid(Minus sign alone is invalid)

解析,模拟,需要认真思考下符合浮点数的逻辑关系,详见代码:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 int main() {
    
     string s;
    
     int len;
    
     int sxd = 0;//小数点数量
    
     int shu = 0;//数字个数
    
     cin >> s;
    
     len = s.length();
    
     for (int i = 0; i < len; i++) {
    
     if ((s[i] == '+' || s[i] == '-')) {
    
         if (i != 0) {//正负号如果不是出现在第一个位置即非法
    
             cout << "Invalid" << endl;
    
             return 0;
    
         }
    
     } else if (s[i] == '.') {
    
         sxd++;
    
         if (sxd > 1) {//如果小数点数量大于1,则非法
    
             cout << "Invalid" << endl;
    
             return 0;
    
         }
    
     } else if (s[i] >= '0' && s[i] <= '9') {
    
         shu++;//统计数字个数
    
     } else {//其他字符,非法
    
         cout << "Invalid" << endl;
    
         return 0;
    
     }
    
     }
    
     if (shu > 0) {//有数字,符合
    
     cout << "Valid" << endl;
    
     return 0;
    
     } else {//没有数字,非法
    
     cout << "Invalid" << endl;
    
     return 0;
    
     }
    
     return 0;
    
 }

全部评论 (0)

还没有任何评论哟~