九度oj 1124 Digital Root

    xiaoxiao2021-03-25  55

    第一版代码如下: include<stdio.h> int sum(int n){ int size,buf[100]; size=0; while(n!=0){ buf[size]=n; n/=10; size++; } int m=0; for(int i=0;i<size;i++){ m+=buf[i]; } if(m>=10) m=sum(m); else return m; } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0) break; int root=sum(n); printf("%d\n",root); } return 0; } 当输入的数不超过九位时,正确。一旦超过会出现负数,明显出错。应该是int类型无法存储这么大的数。由于题目没有说明输入的范围,所以改成long也不一定管用。于是将输入改为用数组存储。 #include<stdio.h> #include<string.h> void root(char a[]){ int ans,len,i; len=strlen(a); ans=0; for(i=0;i<len;i++){ ans+=a[i]-'0'; } i=0; while(ans!=0){ a[i]=ans+'0'; ans/=10; i++; } a[i]='\0'; } int main(){ char a[10000]; while(scanf("%s",a)!=EOF && a[0]!='0'){ while(strlen(a)>1){ root(a); } printf("%s\n",a); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-33507.html

    最新回复(0)