• 【练习题】HDU 2212 DFS


    求 [1, 2147483647] 内所有,每位上的数字的阶乘和等于本身的数,如:145 = 1!+4!+5!

    最近手生找点题做,上来有点蒙,简单题暴力解应该就行,但是需要理清思路

    1. 直接暴力数字很大肯定爆掉
    2. 1~9的阶乘,提前算好存一下
    3. 9的阶乘362880,9999999999的阶乘和为3628800,所以可以考虑缩减暴力范围
      (这点其实应该在第一次写完看到答案之后发现,解只有4个,都很小)
    /**
     * HDU 2212 DFS
     * 注:杭电Java提交需要类名改为Main
     */
    class DFSNumber {
    
    	/*阶乘*/
    	public static int factorial (int num) {
    		int result = 1;
    		while(num > 0) {
    			result *= num;
    			num--;
    		};
    		return result;
    	}
    
    	/*各一位数的阶乘*/
    	public static int[] singleFactorial() {
    		int num = 0;
    		int[] factorials = new int[10];
    		while (num < 10) {
    			factorials[num] = factorial(num);
    			num++;
    		}
    		return factorials;
    	}
    
    	public static void main(String[] args) {
    		int[] factorials = new int[10];	//各一位数的阶乘
    		factorials = singleFactorial();
    
    		int n, sum;
    		for (int i = 1; i < 9999999; i++) {
    			n = i;
    			sum = 0;
    			while (n > 0) {
    				sum += factorials[n%10];
    				n /= 10;
    			}
    			if (sum == i) {
    				System.out.println(i);
    			}
    		}
    	}
    }
    
  • 相关阅读:
    ecshop的详细安装步骤
    php+mysql 除了设置主键防止表单提交内容重复外的另一种方法
    strcmp
    map set区别
    ++i vs i++
    stl vector erase
    user initialization list vs constructor assignment
    default constructor,copy constructor,copy assignment
    memset
    strcpy vs memcpy
  • 原文地址:https://www.cnblogs.com/Locked-J/p/7109652.html
Copyright © 2020-2023  润新知