题目
给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。
巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。
如果这个数字是个位数的话,那么他就满足条件。
输入描述:
给一个整数数字n(1<=n<=1e9)。
输出描述:
输出由n经过操作满足条件的数fa
简单的递归,找到递归重复部分:前一位与后一位相加即可。以此循环往复
方法一:while循环
分析一:
简单的递归,找到递归重复部分:前一位与后一位相加即可。以此循环往复
可用
sum += n % 10;
n /= 10;
作为递推式。
附加判断条件:sum计算之后是否大于10,若大于则返回次循环部分继续计算。
AC代码一:
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int res = 0; while(true){ int sum = 0; while(n > 0){ sum += n % 10; n /= 10; } res = sum ; if(res < 10) break; n = res; } System.out.println(res); } }
方法二:经典递归
分析二:
经典递归格式
AC代码二
import java.util.Scanner; public class Main{ static int getSum(int n){ if(n < 10) return n; else{ int sum = 0; while(n != 0){ sum += n % 10; n /= 10; } return getSum(sum); } } public static void main(String[] args){ Scanner scan = new Scanner(System.in); int n = scan.nextInt(); System.out.println(getSum(n)); } }
方法三:转化成字符串方法
分析三:
将整数n转化成一个字符串,利用charAt()方法,将每一位的数字都加起来,然后循环往复判断加和之后的结果是不是小于10(递归重复部分)。
AC代码三:
import java.util.Scanner; public class Main{ static int getSum(int n){ if(n < 10) return n; //递归出口 else{ int sum = 0; String s = n + ""; //将整数n转化成立字符串 for(int i = 0; i < s.length(); i++){ sum += s.charAt(i) - '0'; //因为s是String型,用charAt读取出每一位的数,用for循环实现累加 } //注意此时都要用Assci码计算,所以减去一个'0' return getSum(sum); //实现递归 } } public static void main(String[] args){ Scanner scan = new Scanner(System.in); int n = scan.nextInt(); System.out.println(getSum(n)); } }