码迷,mamicode.com
首页 > 其他好文 > 详细

Add Digits

时间:2017-11-12 21:52:32      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:integer   方式   its   proc   stat   htm   tps   html   输出   

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.

Follow up:
Could you do it without any loop/recursion in O(1) runtime?

这道题开始我采用的想法是利用字符串数组来收整型的数字,一位一位的加。这个方法太复杂了。

参考了https://www.cnblogs.com/grandyang/p/4741028.html的代码,发现使用数字本身的特点,会

大大简化这个过程。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入整数:");
        int num = sc.nextInt();

        while (num / 10 > 0) {
            int sum = 0;
//一次数的遍历 while (num > 0) { sum += num % 10;//取最后一位的值,记录。 num /= 10;//删除最后一位的值。 } num = sum;//将和赋值给num,若大于10再进行相加。 } System.out.println("num: " + num); } }

这是双重循环,然后还有一种在一次运行中就能解决问题的方式。

       这必须要寻找规律,在所有数中每9个一循环:

       n=0,输出0;

       n != 0 && n!=9的倍数时,借用%9的余数就是其值;

       n == 9的倍数时,其值是定值为9;

下面是代码实现过程,实现一次解决问题。

class Solution {
    public int addDigits(int num) {
        if(num != 0){
            
            if(num%9 != 0){
            num %= 9;
            return num;
       
        }else {
            return 9;
        }
    }
        return 0;
        }
       
}

 在先前grandyang提出的一行代码方式:

(num - 1) % 9 + 1
试验过,包含我上述说的三种可能性,但是我没想明白这是怎么总结的。

 

Add Digits

标签:integer   方式   its   proc   stat   htm   tps   html   输出   

原文地址:http://www.cnblogs.com/liuchuan9504/p/7822814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!