V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fengsehng
V2EX  ›  问与答

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

  •  1
     
  •   fengsehng · 2016-07-09 20:24:07 +08:00 · 2345 次点击
    这是一个创建于 3091 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目描述:

    求整数的 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 面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

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

    这里写图片描述

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

    出题到底是考察什么?先想清楚这些事情再去教别人做算法题
    43588
        15
    43588  
       2016-07-10 16:46:21 +08:00
    8 + 6 + 5 = 19

    1 + 9 = 0

    为啥答案是 1 ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5799 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.