【编程题 】数根(详细注释 易懂)

题目描述

   题目链接:数根__牛客网
       数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。
比如,对于24 来说,把2 和4 相加得到6,由于6 是一位数,因此6 是24 的数根。
再比如39,把3 和9 加起来得到12,由于12 不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。
现在给你一个正整数,输出它的数根。

输入描述:

输入包含多组数据。

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

输出描述:

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

示例1

输入

24
39

输出

6
3

题目理解:

     给一个数,把它的各个位上的数依次加起来,如果大于9,那就继续加它的各个位上的数,直到最终和 是一个 个位数。用例是多组输入。题目要求就这些,没什么难的。

解题思想:

    根据题意,就把各个位上的数加起来,那我们怎么做呢,循环除10,再求余10,依次取到 个位数,十位数,进行相加,这个思路也是可以的。但是既然不区分个位十位百位等,只是把每位上数相加,可以用 字符串做,通过 字符串拿字符思想,依次让它们相加。按道理,多位相加,最后结果肯定是大于9的,这时候就要继续让这个大于9的各个位上的数相加,然后如果还大于9 ,就继续相加,也就是说,这是个 双重循环(外层循环 确保最终 数字字符串只有一位,内层循环不断相加当前数字字符串的每一位)。 但是这里有个取巧思想,就是 我们计算数字能发现,任何一个大于 9的两位数,它的个位数和十位数相加,结果肯定是 小于10的,以最大的 9+9 =18 ,大于10,只需要单独给它处理一下,让 1+8 =9,然后用这个9 去加后面的数字就好了,如果不大于9,就继续往后加,不用处理。 

       说到这里,这道题也就说完了,就是注意一个事,前面说的 用数字去做,做不了,可以看后台给的用例,这也是这道题比较坑的地方。

   

   可以看到 第100,101,102 的用例输入,这都不知道多少位了,用整数根本通不过!

// write your code here
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            String num = scan.next();
            long root = num.charAt(0)-'0';
            for(int i=1;i<num.length();i++){
                if(num.length()<2){
                  
                    break;
                }
                root +=(num.charAt(i)-'0');
               // 如果大于 9 ,就给它单独处理一下,把数字处理为 字符串
                if(root >9){
                    String tmp = new String(root+"");
                    root = (tmp.charAt(0)-'0')+(tmp.charAt(1)-'0'); 
                }
                
            }
           
            System.out.println(root);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值