上海计算机学会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)
还没有任何评论哟~
