1060--合法的整数--2023/1/10

这个题目就是有很多小细节需要考虑,如果你是wa呢,恭喜你,既然wa了,那么离ac也不远了。(哈哈哈)

可以试一下这几个特殊样例哦:(如果wa了就去ddbug吧)

1、+  +125 (有可能有多个符号位)

2、+           (没有数字)

3、+   0125( 开头为0)

4、+   1   2 (数字中有空格)

然后处理的时候注意开头和结尾的空格就可以啦!

好啦,上代码喽!

#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64;

char s[25]; //用来记录每一个样例
int cnt;//每一个样例字符串的长度

void solve(){
    int len=0,len1=0;//len1是用来看是否有多个符号位
    int flag1=0,flag=1;//flag1用来标记出现了多久出现了数字
    while(s[len]!='\0'){
        if(!flag1 && (s[len]==' '||s[len]=='+'||s[len]=='-')){
            if(s[len]=='+'||s[len]=='-') len1++;
            if(len1>1) flag=0;//有多个符号位就跳出循环哦
        } //当没有出现数字时空格和加减号没有严格要求
        else{
            if(s[len]>='0' && s[len]<='9'){
				if(!flag1 && s[len]=='0' && s[len+1]!='\0') flag=0;//当第一个数字是0的时候而且后面还有其他的那么就是不对的
				flag1=1;//已经有数字了
			}
            else flag=0;
        }
        len++; //往后加一
        if(!flag) break;
    }
    if(flag && flag1) printf("Yes\n"); //符合规则且要有数字
    else printf("No\n");
}

int main(){
    char c;
    while(scanf("%c",&c)!=EOF){
        if(c=='\n'){
            while((cnt-1) && s[cnt-1]==' ') cnt--;//处理掉结尾的空格
            s[cnt]='\0';//用来打标记,也可以用其他的来打标记,只要能知道什么时候遍历结束就可以了哦
            solve();//处理这一个字符串
            cnt=0;//开启下一个字符串
        }
        else s[cnt++]=c;
    }
    return 0;
}

这个题目还可以用gets来输入:

#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64;

char s[25]; //用来记录每一个样例
int cnt;//每一个样例字符串的长度

void solve(){
    int len=0,len1=0;//len1是用来看是否有多个符号位
    int flag1=0,flag=1;//flag1用来标记出现了多久出现了数字
    while(s[len]!='\0'){
        if(!flag1 && (s[len]==' '||s[len]=='+'||s[len]=='-')){
            if(s[len]=='+'||s[len]=='-') len1++;
            if(len1>1) flag=0;//有多个符号位就跳出循环哦
        } //当没有出现数字时空格和加减号没有严格要求
        else{
            if(s[len]>='0' && s[len]<='9'){
				if(!flag1 && s[len]=='0' && s[len+1]!='\0') flag=0;//当第一个数字是0的时候而且后面还有其他的那么就是不对的
				flag1=1;//已经有数字了
			}
            else flag=0;
        }
        len++; //往后加一
        if(!flag) break;
    }
    if(flag && flag1) printf("Yes\n"); //符合规则且要有数字
    else printf("No\n");
}

int main(){
      while(gets(s)!=NULL){ //为什么用NULL,然后NULL是什么,可以搜一下gets的返回值和什么是NULL
        //去掉结尾的空格
        int s1=strlen(s);
        while(s[s1-1]==' ') s1--;
        s[s1]='\0';
        solve();
    }
    return 0;
}

加油哦,我们明天再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值