题目
给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。
巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。
如果这个数字是个位数的话,那么他就满足条件。
输入描述:
给一个整数数字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));
}
}

京公网安备 11010502036488号