| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 861 人关注过本帖
标题:杭电1013帮忙看下,哪里问题
只看楼主 加入收藏
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:7 
杭电1013帮忙看下,哪里问题
程序代码:
Digital Roots
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 36662    Accepted Submission(s): 11228

Problem Description
The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the process is repeated. This is continued as long as necessary to obtain a single digit.
For example, consider the positive integer 24. Adding the 2 and the 4 yields a value of 6. Since 6 is a single digit, 6 is the digital root of 24. Now consider the positive integer 39. Adding the 3 and the 9 yields 12. Since 12 is not a single digit, the process must be repeated. Adding the 1 and the 2 yeilds 3, a single digit and also the digital root of 39.


Input
The input file will contain a list of positive integers, one per line. The end of the input will be indicated by an integer value of zero.


Output
For each integer in the input, output its digital root on a separate line of the output.


Sample Input
24
39
0
Sample Output
6
3
我的代码如下:

#include <stdio.h>

int main() {
    int n, sum, count, t, i, a[100];
    while(scanf("%d", &n) != EOF && n > 0) {
        count = 0; i = 0;
        t = sum = n;
        loop : while(t) {
            count++;
            a[i++] = t % 10;
            t /= 10;
        }
        while(sum >= 10) {
            t = 0;
            for(i = 0; i < count; i++) t += a[i];
            sum = t, count = i = 0;
            goto loop;
        }
        printf("%d\n", sum);
    }
    return 0;
}
//简单说下题意如
3 = 3
33 = 3 + 3 = 6
333 = 3 + 3 + 3 = 9
3333 = 3 + 3 + 3 + 3 = 12 = 1 + 2 = 3
搜索更多相关主题的帖子: single positive digital Java 
2013-04-12 13:25
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
或许数据太大,int装不下吧,这道题没必要存数据啊,边读边计算就行


[fly]存在即是合理[/fly]
2013-04-12 15:07
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
坛里对此题有很全面的讨论,搜下

www.qunxingw.wang
2013-04-12 16:41
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
有么?给个传送看看....没找到
2013-04-12 18:14
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
以下是引用azzbcc在2013-4-12 15:07:08的发言:

或许数据太大,int装不下吧,这道题没必要存数据啊,边读边计算就行
应该够大了吧?  我看到好多人都是边读边计算的,但是我偏偏没那么做,将一个很大很大的数拆开加起来,看了下好像不怎么大了...主要我想弄清楚我的问题在哪里?
2013-04-12 18:39
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:0 
#include <stdio.h>

int main() {
    int n, sum, t ;
    while(scanf("%d", &n) != EOF && n > 0)
    {
        t=sum=n;
        while(t>10)
        {   
            sum=0;
            while(t)
            {
              sum+= t % 10;
              t /= 10;
            }
            t=sum;
        }
        printf("%d\n", sum);
    }
    return 0;
}
参考一下这个程序
2013-04-13 10:29
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <string.h>
#define MAX 10000
char str[MAX];
long judge(long n)
{
    long sum=0;
    while(n)
    {
        sum+=(n%10);
        n/=10;
    }
    if(sum%10==sum) printf("%ld\n",sum);
    else judge(sum);
}
int main()
{
    int i;
    long sum;
    while(scanf("%s",str)!=EOF)
    {
        if(str[0]=='0') break;
        sum=0;
        for(i=0;i<strlen(str);i++) sum+=(str[i]-48);
        judge(sum);
    }
    return 0;
}

编程之路定要走完……
2013-04-13 13:07
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:15 
程序代码:
#include <stdio.h>
#include <string.h>
int main() {
    char s[1005];
    int a[1005], len, i, sum, n, t, b;
    while(scanf("%s", s) != EOF) {
        if(s[0] == '0') return 0;
        memset(a, 0, sizeof(a));
        sum = 0;
        len = strlen(s);
        for(i = 0; i < len; i++) {
            a[i] = s[i] - '0';
            sum += a[i];
        }
        n = sum;
        b = 0;
        loop : while(n) {
                    t = n % 10;
                    n /= 10;
                    b += t;
                    sum = b;
                }
        while(sum >= 10) {
            n = sum;
            b = 0;
            goto loop;
        }
        printf("%d\n", sum);
    }
    return 0;
}

仰望星空...........不忘初心!
2013-04-19 17:59
快速回复:杭电1013帮忙看下,哪里问题
数据加载中...
 
   



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

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