当前位置: 代码迷 >> J2SE >> java基础题解决办法
  详细解决方案

java基础题解决办法

热度:11   发布时间:2016-04-24 00:23:12.0
java基础题
对于一个整数n,有一个函数f(n) 可以计算到0到n之间的出现“1“的个数。
  例如:f(1) = 1,f(13) = 6,
  因为 1,2,3,4,5,6,7,8,9,10,11,12,13 数数1的个数正好是6。
 实现这个函数 int f(int n) 
 只能用递归解答!
请高手指点一下!

------解决方案--------------------
Java code
public static int test(int i) {        if (1 == i) {            return 1;        }        return (String.valueOf(i).indexOf("1") == -1 ? 0 : 1) + test(i - 1);    }    public static void main(String[] args) {        System.out.println("包含1个数: " + test(13));    }
------解决方案--------------------
Java code
import java.util.Scanner;public class OneCount {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        System.out.println(count(n));    }    private static int count(int n) {        if (0 >= n) {            return 0;        } else {            return count(n-1) + getOneCount(n);        }    }    private static int getOneCount(int n) {        int count = 0;        String str = String.valueOf(n);        for (int i = 0; i < str.length(); i++) {            if('1' == str.charAt(i))                count++;        }        return count;    }}
------解决方案--------------------
用递归,效率太低了,这个有个规律的

C/C++ code
#include <iostream>using namespace std;int main(){    int num = 121212,saveNum = 1,countNum = 0,lastNum=0,numCopy = num;        while(num!=0)       {        lastNum = num%10;      num/=10;    if(lastNum == 0){      countNum +=(num)*saveNum;    }else if(lastNum == 1){      countNum += num * saveNum + numCopy%(saveNum) + 1;    }else{      countNum +=(num+1)*saveNum;    }      saveNum*=10;    }    cout<<countNum<<endl;    return 0;}
------解决方案--------------------
Java code
public class CountOnes {        private static int getCount(int number) {        if ((number !=0 ) && ((number % 10) == 1))  {            return (getCount(number / 10) + 1);        } else if ((number !=0 ) && ((number % 10) != 1)) {            return getCount(number / 10);        } else {            return 0;        }    }        private static int calcCountNumber(int number) {        int result = 0;        for (int i = 0; i < (number + 1); i++) {            result += getCount(i);        }        return result;    }        public static void main(String [] args) {        System.out.println(calcCountNumber(13));    }}
  相关解决方案