#4351: 3的倍數有誤


qmoment (加油)


#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 (向諸神與地雷醬獻上祈禱)


#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 (文旋)


#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 (加油)


#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判斷錯而提早結束字串分析

 我懂了

謝謝各位的回答