标签: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 = 11
, 1 + 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
试验过,包含我上述说的三种可能性,但是我没想明白这是怎么总结的。
标签:integer 方式 its proc stat htm tps html 输出
原文地址:http://www.cnblogs.com/liuchuan9504/p/7822814.html