#4351: 3的倍數有誤


qmoment (加油)

學校 : 國立臺灣大學
編號 : 13655
來源 : [140.112.30.235]
最後登入時間 :
2011-05-29 16:57:27
d124. 3的倍数 | From: [140.112.30.203] | 發表日期 : 2010-10-08 16:29

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
char n[20000];
int i=0;
int sum=0;
while(gets(n))
{
for(i=0;i<strlen(n);i++)
{
        n[i]=n[i]-48;
        sum=sum+n[i];
}
    if(sum%3==0)
        printf("yes\n");
    else
        printf("no\n");
    sum=0;
    for(i=0;i<strlen(n);i++)
    n[i]=0;
}
}

 各位好

 以上是我的程式碼

 系統說與正確輸出不相符(line:10)
您的答案為: no
正確答案為: yes

有大大可以幫我解答嗎

 
#4352: Re:3的倍數有誤


asas (向諸神與地雷醬獻上祈禱)

學校 : 不指定學校
編號 : 5185
來源 : [36.228.104.72]
最後登入時間 :
2024-03-06 23:29:54
d124. 3的倍数 | From: [203.64.161.123] | 發表日期 : 2010-10-08 17:41

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
char n[20000];
int i=0,length;

int sum=0;
while(gets(n))
{

length=strlen(n);

for(i=0;i<length;i++)

{
        n[i]=n[i]-48;
        sum=sum+n[i];
}
    if(sum%3==0)
        printf("yes\n");
    else
        printf("no\n");
    sum=0;
    for(i=0;i<length;i++)
    n[i]=0;
}
}

 

至於原因我不清楚 

 
#4353: Re:3的倍數有誤


david942j (文旋)

學校 : 臺北市立成功高級中學
編號 : 6086
來源 : [115.43.75.16]
最後登入時間 :
2017-02-18 13:17:39
d124. 3的倍数 | From: [172.18.14.206] | 發表日期 : 2010-10-08 17:48

#include
#include
#include

int main()
{
char n[20000];
int i=0,length;

int sum=0;
while(gets(n))
{

length=strlen(n);

for(i=0;i

{
        n[i]=n[i]-48;
        sum=sum+n[i];
}
    if(sum%3==0)
        printf("yes\n");
    else
        printf("no\n");
    sum=0;
    for(i=0;i
    n[i]=0;
}
}

 

至於原因我不清楚 

strlen是讀字串中第一個'\0'的位置

也就是ASCII 值為0的那個

所以n[i]=n[i]-48會導致strlen判斷錯而提早結束字串分析

 
#4354: Re:3的倍數有誤


qmoment (加油)

學校 : 國立臺灣大學
編號 : 13655
來源 : [140.112.30.235]
最後登入時間 :
2011-05-29 16:57:27
d124. 3的倍数 | From: [140.112.4.170] | 發表日期 : 2010-10-08 18:22

#include
#include
#include

int main()
{
char n[20000];
int i=0,length;

int sum=0;
while(gets(n))
{

length=strlen(n);

for(i=0;i

{
        n[i]=n[i]-48;
        sum=sum+n[i];
}
    if(sum%3==0)
        printf("yes\n");
    else
        printf("no\n");
    sum=0;
    for(i=0;i
    n[i]=0;
}
}

 

至於原因我不清楚 

strlen是讀字串中第一個'\0'的位置

也就是ASCII 值為0的那個

所以n[i]=n[i]-48會導致strlen判斷錯而提早結束字串分析

 我懂了

謝謝各位的回答


 
ZeroJudge Forum