标题:小白求教
只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 10楼 ehszt
那个可以自己简单弄弄看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-16 13:41
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 11楼 九转星河
在你基础上改了下
#include<stdio.h>

int main( void )
{
    int ch=0;
    char m;
    while ((m=getchar())!='\n'&&m>='0'&&m<='9'){
        ch+=m-'0';
    }
   
    puts( ch%3==0? "YES" : "NO" );
   
    return 0;
}
2018-04-16 14:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 12楼 ehszt
还要考虑负数以及前面带加号的正数

PS:忘记了,其实还有加括号也是合法的

-(-+-+-+-123)==-123这样~

PPS:还有整数前空白字符的影响~

总之如果要引入符号问题要处理的东西太多了,有时简单能实现功能就好~

[此贴子已经被作者于2018-4-17 12:27编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-16 14:47
goosey
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-4-7
得分:0 
回复 2楼 李晨经纪人
n+=a[i]-'0';   这一步是什么意思,不太明白
2018-04-16 19:34
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
得分:0 
回复 14楼 goosey
把整数当成若干的字符看。对应ascii码比如字符 '5' ( '5' - '0' == 5 )
我这里用了数组,如果不再继续处理输入的数字的话,你可以不用数组。
没考虑出现负数的情况,我改了下,加入+,-号
程序代码:
#include<stdio.h>
int main(void)
{
    char a[301];
    int i=0,n=0;
    while((a[i]=getchar())!='\n')
    {
        if(a[i]>='0'&&a[i]<='9')
             n+=a[i]-'0';
        ++i;
    }
    a[i]='\0';
    puts(n%3==0?"YES":"NO");
    return 0;
}




[此贴子已经被作者于2018-4-16 20:58编辑过]

2018-04-16 20:55
l1550167775
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2018-4-16
得分:3 
小白一点都不懂...
2018-04-16 21:10
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 13楼 九转星河
其实说到底就是要对整数进行一个系统性的定义~
什么是整数?~
之前那个可以叫为整数表达式~

如果规定整数前面只能出现一个正号或者负号并且后续不能含有其它字符~
那么可以

程序代码:
#include<stdio.h>
#include<ctype.h>

int fun( void );

int main( void )
{
    puts( fun()==0? "YES" : "NO" );
    
    return 0;
}

int fun( void )
{
    int ch=((ch=getchar())=='-'||ch=='+')?0:ch;
        
    unsigned k;
    
    if (!isdigit(ch)&&ch)
        return -1;
   
   for (k=ch;isdigit(ch=getchar());k+=ch);

    if (ch!='\n'||k==0)
        return -1;
        
   return k%3;
}


看得出如果引入正负号以及非数字字符问题那么逻辑处理会变得复杂很多,看看就可以了~

参考了r版的某个代码完善了加入空格判断,顺便熟悉了解一下~

程序代码:
#include<stdio.h>

int fun( void );

int main( void )
{
    puts( fun()==0? "YES" : "NO" );
    
    return 0;
}

#include<ctype.h>
#include <errno.h>

int fun( void )
{
    int ch;
    
    unsigned k;
    
    while (isspace(ch=getchar()));
    
    ch=(ch=='-'||ch=='+')?0:ch;
    
    if (!isdigit(ch)&&ch)
    {
        errno=ERANGE;
        return -1;
    }
   
   for (k=ch;isdigit(ch=getchar());k+=ch);

    if (ch!='\n'||k==0)
    {
        errno=ERANGE;
        return -1;
    }
        
   return k%3;
}


[此贴子已经被作者于2018-4-17 11:42编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-16 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486095-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.668645 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved