【编程马拉松】【009-数根】

【编程马拉松算法目录>>>】


【009-数根】【工程下载>>>】


1 题目描述



  数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。

  比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。现在给你一个正整数,输出它的数根。

1.1 输入描述:



  输入包含多组数据。

  每组数据包含一个正整数n(1≤n≤10100)。

1.2 输出描述:



  对应每一组数据,输出该正整数的数根。

1.3 输入例子:


24
39

1.4 输出例子:


6
3

2 解题思路



  因为输入的数据可以非常大,所以收的数字必须用字符串进行表示s。先对s中的每一个数位进行相加,可以得到一个整数n,如果n小于10可以直接返回结果,如果n大于等于10,对n进行处理,求每个数位上的和m,再判断m是否小于10,是就返回,不是就采用同样的方法进行处理。

3 算法实现

import java.util.Scanner;

/**
 * Author: 王俊超
 * Time: 2016-05-09 10:38
 * CSDN: http://blog.csdn.net/derrantcm
 * Github: https://github.com/Wang-Jun-Chao
 * Declaration: All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
        while (scanner.hasNext()) {
            String num = scanner.next();
            System.out.println(solve(num));
        }

        scanner.close();
    }

    /**
     * 求数字的数根
     *
     * @param num 字符串表示的数字
     * @return 数根
     */
    private static int solve(String num) {

        int n = 0;

        for (int i = 0; i < num.length(); i++) {
            n += num.charAt(i) - ‘0‘;
        }

        int i;
        int t;
        while (n >= 10) {
            i = n;
            t = 0;
            while (i != 0) {
                t += i % 10;
                i /= 10;
            }
            n = t;
        }
        return n;
    }
}

4 测试结果



5 其它信息



因为markddow不好编辑,因此将文档的图片上传以供阅读。Pdf和Word文档可以在Github上进行【下载>>>】

时间: 2024-12-28 00:34:41

【编程马拉松】【009-数根】的相关文章

【编程马拉松】【007-循环数】

[编程马拉松算法目录>>>] [007-循环数][工程下载>>>] 1 题目描述 142857是一个六位数,我们发现: 142857*1=142857 142857*2=285714 142857*3=428571 142857*4=571428 142857*5=714285 142857*6=857142 即用1到6的整数去乘142857,会得到一个将原来的数首尾相接循环移动若干数字再在某处断开而得到的数字. 也就是说,如果把原来的数字和新的数字都首尾相接,他们得到

hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 889    Accepted Submission(s): 207 Problem Description "今有物不知其数,三三数之有二,五五数之有三,七七数之有

【编程马拉松】【024-放苹果】

[编程马拉松算法目录] [024-放苹果][工程下载>>>] 1 题目描述 把 M 个同样的苹果放在 N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 注意:5.1.1 和 1.5.1 是同一种分法,即顺序无关. 1.1 输入描述: 输入包含多组数据. 每组数据包含两个正整数 m和n(1≤m, n≤20). 1.2 输出描述: 对应每组数据,输出一个整数k,表示有k种不同的分法. 1.3 输入例子: 7 3 1.4 输出例子: 8 2 解题思路 2.1 解法一 放苹果,

【编程马拉松】【019-一笔画】

[编程马拉松算法目录] [019-一笔画][工程下载>>>] 1 题目描述 咱们来玩一笔画游戏吧,规则是这样的:有一个连通的图,能否找到一个恰好包含了所有的边,并且没有重复的路径. 1.1 输入描述: 输入包含多组数据.每组数据的第一行包含两个整数n和m (2≤n, m≤1000),其中n是顶点的个数,m是边的条数.紧接着有m行,每行包含两个整数from和to (1 ≤ from, to ≤ n, from != to),分别代表边的两端顶点.边是双向的,并且两个顶点之间可能不止一条边.

【编程马拉松】【006-统计一】

[编程马拉松算法目录>>>] [006-统计一][工程下载>>>] 1 题目描述 NewCode总是力争上游,凡事都要拿第一,所以他对"1"这个数情有独钟.爱屋及乌,他也很喜欢包含1的数,例如10.11.12.--. 例如:N=2,1.2出现了1个"1".N=12,1.2.3.4.5.6.7.8.9.10.11.12.出现了5个"1".你能帮他统计一下整数里有多少个1吗? 1.1 输入描述: 输入有多组数据,每

【编程马拉松】【020-小世界现象】

[编程马拉松算法目录] [020-小世界现象][工程下载>>>] 1 题目描述 小世界现象(又称小世界效应),也称六度分隔理论(英文:Six Degrees of Separation). 假设世界上所有互不相识的人只需要很少中间人就能建立起联系.后来1967年哈佛大学的心理学教授斯坦利·米尔格拉姆根据这概念做过一次连锁信实验,尝试证明平均只需要5个中间人就可以联系任何两个互不相识的美国人. NowCoder最近获得了社交网站Footbook的好友关系资料,请你帮忙分析一下某两个用户之间

编程马拉松】【010-杨辉三角】

[编程马拉松算法目录>>>] [010-杨辉三角][工程下载>>>] 1 题目描述 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角. 1.1 输入描述: 输入数据包含多组测试数据. 每组测试数据的输入只有一个正整数n(1≤n≤128),表示将要输出的杨辉三角的层数. 输入以0结束 1.2 输出描述: 对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一

HDU - 4544 湫湫系列故事――消灭兔子 2013腾讯编程马拉松复赛第三场

Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买. 假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币. Input 输入数据有多组,每组数据有四行: 第一行有两个整数N,M(1 <= N, M &l

HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4528 小明系列故事——捉迷藏 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1464    Accepted Submission(s): 423 Problem Description 小明的妈妈生了三个孩子,老大叫大明, 老二叫