Advertisement

上海计算机学会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;
    
 } 
    
    
    
    

全部评论 (0)

还没有任何评论哟~