package com.company.Tt; import java.util.Scanner; public class T4 { public static void main(String[] args) { Scanner cs = new Scanner(System.in); System.out.println("请输入一个多位整数来计算出0到该数的1出现的个数......"); int n = cs.nextInt(); //要求操作者输入一个正整数 T4 t = new T4(); //声明一个T4类的对象 t.finds2(n); //调用方法2 System.out.println("0到"+n+"之间出现1的个数为:"+t.n1+"个"); //打印方法2的结果 } public int n1 = 0; //定义一个成员变量计数器n1 public void finds2(int n2){// 方法2递归 if(n2 == 1 ){ //如果测试数为1计数器加1 this.n1 += 1; }else{ f(n2);//检测各位的数值是否为1 finds2(n2-1); //自身调用 } } public void f(int a){//对多位检测是否为1 if(a>=10){//检测该数是否已经为单位数了,如果为多位数则进行求余检测 if(a%10 == 1){//检测各位 this.n1 += 1; } //在此减一位递归 f(a /= 10 ); //递减一位 }else {//检测该数如果为单位数是,对该单位数进行检测 if(a == 1){ this.n1 += 1; } } } }
自我感觉用for循环比较爽,这纯属娱乐一下。。。。
图解: