fengsehng
V2EX  ›  问与答

华为机试题 [10] -求数字基 root

  •  1
     
  •   fengsehng · Jul 9, 2016 · 3093 views
    This topic created in 3597 days ago, the information mentioned may be changed or developed.

    题目描述:

    求整数的 Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一个输入数据的结果。

    样例输入:

    25 865

    样例输出:

    7 1

    思路分析:

    • 首先求个位数相加,经典方法,求余相除
    • 要求各个位数的和是小于 10 ,可以采用递归或者循环

    代码:

    import java.util.Scanner;
     
    public class Main {
    	static int[] num = {1,2,5,10,20,50,100};
    	public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
     	while(scan.hasNext()){
     		int input = scan.nextInt();
     		if(input < 1){
     			System.out.println(-1);
     		}else{
     			System.out.println(getRoot(input));
     		}
    	}	
        }
    	public static int getRoot(int n){
    		int all = 0;
    		int a = 0;
    		while(n > 0){
    			a = n % 10;
    			n = n / 10;
    			all = all +a;
    		}
    		if(all >= 10){
    			return getRoot(all);
    		}
    		return all;
    	}
    }
    

    我的微信二维码如下,欢迎交流讨论

    这里写图片描述

    欢迎关注《 IT 面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

    微信订阅号二维码如下:##

    这里写图片描述

    Supplement 1  ·  Jul 9, 2016
    这个题目看错了,程序最后的判断是小于 10
    Supplement 2  ·  Jul 9, 2016
    不对,程序是对的,不用改
    15 replies    2016-07-10 16:46:21 +08:00
    just4test
        1
    just4test  
       Jul 9, 2016
    还以为有什么先进的玩意,结果根本没有。
    just4test
        2
    just4test  
       Jul 9, 2016
    还有那个 num 的变量声明了也没用到啊
    wzxjohn
        3
    wzxjohn  
       Jul 9, 2016 via iPhone
    兄弟,先去吧 Leet Code Easy 做完再去面试吧。。。
    这题是 O(1) 的。
    wzxjohn
        4
    wzxjohn  
       Jul 9, 2016 via iPhone
    哦, n 个数,那是 O(n)
    SourceMan
        5
    SourceMan  
       Jul 9, 2016 via iPhone
    @wzxjohn 人家只是为了推广而已啦,管啥 O(n)
    leewangyang
        6
    leewangyang  
       Jul 9, 2016 via Android
    楼上说的对。。。对每个数是 o(1)的,模 9 为 0 就是 9 ,非 0 就是余数
    wzxjohn
        7
    wzxjohn  
       Jul 9, 2016
    @SourceMan 唉。。。你说这分享的要是对的也就罢了,还分享错的。。。简直了。。。
    fengsehng
        8
    fengsehng  
    OP
       Jul 9, 2016
    这个题,看错题目了,小于 10 ,看成小于等于 10 了,最后一步判断<10
    wodesuck
        9
    wodesuck  
       Jul 10, 2016
    @wzxjohn +1 ,分享错的就很尴尬了……错的还是这种小学生数学……
    9hills
        10
    9hills  
       Jul 10, 2016 via Android
    你这个假如题目有 10 分,只能得四五分吧,就不是正确答案属于酌情给分范围…
    fengsehng
        11
    fengsehng  
    OP
       Jul 10, 2016
    @9hills 这个是机试通过了,我到现在没有找到错误,帮我指出呗,这个题不要求时间和空间效率
    loading
        12
    loading  
       Jul 10, 2016 via Android
    有这样推广的?
    block
    hxtheone
        13
    hxtheone  
       Jul 10, 2016
    分享代码是好的, 但是起码把代码弄好看点吧(缩进, 无用变量), 而且这种 leetcode easy 难度都不如的题有分享的意义吗?
    9hills
        14
    9hills  
       Jul 10, 2016 via iPad
    @fengsehng 算法题能跑对就完了?出个排序题你给个 O(N2)的解决办法也是 ok 的?

    出题到底是考察什么?先想清楚这些事情再去教别人做算法题
    43588
        15
    43588  
       Jul 10, 2016
    8 + 6 + 5 = 19

    1 + 9 = 0

    为啥答案是 1 ?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2953 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 14:38 · PVG 22:38 · LAX 07:38 · JFK 10:38
    ♥ Do have faith in what you're doing.