题解 | #The Biggest Water Problem# 3种方法

The Biggest Water Problem

https://ac.nowcoder.com/acm/problem/15173

题目
给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。
巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。
如果这个数字是个位数的话,那么他就满足条件。

输入描述:

给一个整数数字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));
    }
}


全部评论

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
06-07 17:17
嘉兴学院 教师
心爱的idea:你孩
点赞 评论 收藏
分享
码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务