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

输入一串字符,请判断它是否可以成为一个浮点数的合法表示。浮点数的表示需要满足以下格式:

  • 可以有 - 或 +,也可以没有,但最多只有一个,且必须出现在第一个字符;
  • 可以有小数点,也可以没有小数点,但最多只有一个小数点;
  • 整数部分可以省略、小数部分也可以省略、但不能同时省略。
输入格式

若干个字符,表示一个有待验证的字符串,保证每个字符都是可见字符,保证不会出现空格或换行。

输出格式

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

数据范围

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

样例数据

输入:

+3.1415926

输出:

Valid

输入:

1.0e10

输出:

Invalid

输入:

-25.

输出:

Valid

输入:

.

输出:

Invalid

输入:

-.

输出:

Invalid

题解

本题关键点:分清逻辑,不合法的情况:

1.  有多余的小数点(>1)

2. 除了第一个(只包含加减号)外,数中出现加减号和其他字符

3. 数字的数量等于0

代码如下。

#include <iostream>
#include <string>
using namespace std;
int main(){
	string s;
	cin>>s;
	int len,cnt,num;
	len=s.length();
	num=0;
	cnt=0;
	if(s[0]=='-' || s[0]=='+' || s[0]=='.' || isdigit(s[0])){
		if(s[0]=='.'){
			num++;
		}
		for(int i=1;i<len;i++){
			if(isdigit(s[i]) || s[i]=='.'){
				if(s[i]=='.'){
					num++;
				}else{
					cnt++;
				}
									 
			}else{
				cout<<"Invalid"<<endl;
				return 0;
			}
		}
		if(cnt==0 || num>=2){
			cout<<"Invalid"<<endl;

		}else{
			cout<<"Valid"<<endl;
		}							
	}else{
		cout<<"Invalid"<<endl;
	}
	return 0;
} 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 17:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 17:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 17:24:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 17:24:01       20 阅读

热门阅读

  1. 【protobuf】protobuf 开发 (二)

    2024-05-04 17:24:01       13 阅读
  2. 卷积神经网络

    2024-05-04 17:24:01       9 阅读
  3. typescript 学习笔记

    2024-05-04 17:24:01       11 阅读
  4. vue如何实现异步组件

    2024-05-04 17:24:01       12 阅读
  5. 【开发技巧】青龙面板cookie过期

    2024-05-04 17:24:01       11 阅读
  6. DataV的轮播表后端返回的数据处理

    2024-05-04 17:24:01       13 阅读
  7. P2404 自然数的拆分问题 题解

    2024-05-04 17:24:01       13 阅读
  8. android 14.0 SystemUI导航栏添加虚拟按键功能(三)

    2024-05-04 17:24:01       11 阅读
  9. 404 Not Found - GET https://registry.npmjs.org/fs-promises

    2024-05-04 17:24:01       13 阅读