HDOJ 1013

//wa的代码,既然说是整数,应该不用考虑大数,可实际上却要考虑大数

#include<stdio.h>

int main()

{

int num,temp;

while(scanf("%d",&num),num)

{

temp=num%9;

printf("%d\n",temp);

}

return 0;

}

//或者mod9,若是k,则各个数字和为k

//既然说是整数,应该不用考虑大数,可实际上却要考虑大数

/*超时代码

#include<stdio.h>

int count_digit(int num)

{

int sum=0,p=1;

while(p)

{

p=num%10;

sum+=p;

p=num/10;

}

return sum;

}

int main()

{

int num,ans;int temp;

while(scanf("%d",&num),num)

{

temp=count_digit(num);

if(temp>=10)

temp=count_digit(temp);

printf("%d\n",temp);

}

return 0;

}*/

//AC

#include<stdio.h>

#include<string.h>

#define MAX 10000

char a[MAX];

void count(int n)

{

    int tem,sum=0;

    while(n!=0)

    {

        sum+=n%10;

        n/=10;

    }

    if(sum<10)

    {

        printf("%d\n",sum);

    }

    else

    {

        count(sum);//这样便不必用goto

    }

}

int main()

{

    int i,num,len;

    while(scanf("%s",a)&&a[0]!='0')

    {

        num=0;

        len=strlen(a);

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

        {

            num+=(a[i]-'0');

        }

        count(num);

    }        

    return 0;

}

//程序停止,因为str为指针,未指向确定空间,需要分配一个很大的空间

#include<stdio.h>

#include<string.h>

int main()

{

char *str;

int i;int len,sum=0,ans; 

//不能char str,这是单字符,否则subscript(下标) requires array or pointer type

while(scanf("%s",str),str[0]!='0')

//刚开始,多加了取地址符,结果程序停止工作

{

//getchar();

len=strlen(str);

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

sum+=str[i]-'0';

ans=sum%9;

printf("%d\n",ans);

}

return 0;

}

/*程序停止工作,提交会TLE

1.可能递归没有出口

2.scanf中未加取地址符,或者多加了取地址符

3.引用了未经初始化的内存*/

#include<stdio.h>

#include<string.h>

#define N 10000

char str[N];

int main()

{

int i;int len,sum,ans; 

//不能char str,这是单字符,否则subscript(下标) requires array or pointer type

while(scanf("%s",str),str[0]!='0')

//刚开始,多加了取地址符,结果程序停止工作

{

//getchar();

len=strlen(str);

sum=0;//需放在while内部

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

sum+=str[i]-'0';

ans=sum%9;

printf("%d\n",ans);

}

return 0;

}

原文地址:https://www.cnblogs.com/hxsyl/p/2462202.html