[解题报告]Summing Digits

题目大意

题目原文:http://uva.onlinejudge.org/external/113/11332.pdf

背景:

对一个正整数 n, f(n) 表示 n 以十进制表示时所有位数的和。显而易见地,数列 n, f(n), f(f(n)), f(f(f(n))), ...一直重复下去最后会变成一个一位数的整数。这个一位数字以 g(n) 表示。
例如,若 n = 1234567892,则:
f(n) = 1+2+3+4+5+6+7+8+9+2 = 47
f(f(n)) = 4+7 = 11
f(f(f(n))) = 1+1 = 2
因此, g(1234567892) = 2。

intput

每笔测试数据一列。每列都有一个大不于2,000,000,000 的正整数 n。当 n = 0 时代表输入结束,不用输出 n = 0 这笔数据。请参考 Sample Input

output

每笔测试数据输出一列 g(n)。
 

Sample input

2
11
47
1234567892
0

Output for sample input

2
2
2
2

算法:

我这次尝试了下用函数,还有就是自己很不习惯用long首先想到的是double和float,但是%又只能是俩个整数所以自己要记住这点。还要以后的代码尽量用函数来表示,因为以后出去工作基本都是用函数,还有要加强习惯去写注释。这是道比较简单的题目具体就不说了。

 

代码:

这里附上我的代码,你可以去这里提交你的代码验证你的代码是否正确。

#include<stdio.h>
int chang(long long n);
int main(void)
{
    long long n;

    while(scanf("%lld",&n)!=EOF)
    {
        if(n==0)break;
        printf("%d\n",chang(n));

    }
    return 0;
}
int chang(long long n)
{
    int num[10];
    int sum=0,i,j;

    if(n<10)
    {
        sum=(int)n;
        return sum;
    }
    else
    {
        for(i=0;;i++)
        {
            for(j=0;;j++)
            {
                if(n<10)
                {
                    sum+=n;
                    break;
                }
                num[j]=n%10;
                sum+=num[j];
                n=n/10;
            }
            if(sum<10)break;
            else
            {
                n=sum;
                sum=0;
            }
        }
        return sum;
    }
}

 

 

转载于:https://www.cnblogs.com/qisong178878915/archive/2013/02/21/2920551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值