思路
当数的位数不为1时,各个位数相加
代码及解析
import java.util.Scanner; public class HomeWork006 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int m = scan.nextInt(); int sum = 0; if(scan.hasNextLine()){ while(m/10 != 0) { //位数非1位,进入循环 while (m != 0) { //各位相加 sum = sum + m % 10; m /= 10; } m = sum; sum = 0; } System.out.println(m); } scan.close(); } }
进阶版
解析
这里考虑二位以上的数字
10的任何次方对9取余都为1,如果数字上所有位数的和位0-8时,我们可以直接对9取余,得到的结果就是原数字所有位数相加的和
如果取模9后得到的结果为0,由于只有该数为0时(个位数可以用if语句排除),那么数字上的所有位数相加的和为9
为什么九余数法能够一次实现重复相加
例如726-15-6,取模9再一次把15各个位数上的数相加
代码及解析
import java.util.Scanner; public class HomeWork006 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int m = scan.nextInt(); int sum = 0; if(scan.hasNextLine()){ if(m/10 == 0) { //个位数直接输出,这里为了防止输入的数为0 System.out.println(m); }else{ if(m%9 == 0){ //各个位数相加为9 System.out.println("9"); }else{ //各个位数相加为0-8 sum = m%9; System.out.println(sum); } } } scan.close(); } }
Java中的是否赋初值问题
成员变量(实例化变量和类变量):根据其类型都有默认初始化值
局部变量:没有默认初始化值,我们在调用局部变量之前需要赋值
(特别的,在形参调用时,直接赋值即可)
数组:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配内存空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
成员变量
java中,成员变量是指在类体的变量部分中定义的变量,也称属性。
成员变量声明在类中,方法体之外,在创建对象时实例化;
成员变量可被类中的方法、构造方法以及特定的语句块访问。
如果声明成员变量时没对其初始化,则系统会使用默认初始化成员变量
定义类的成员变量示例: