首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java面试 >

Java 阶乘和数,该怎么处理

2012-12-17 
Java 阶乘和数题目描述一个正整数如果等于组成它的各位数字的阶乘之和,该整数称为阶乘和数。 例如,1451!+4

Java 阶乘和数
题目描述
一个正整数如果等于组成它的各位数字的阶乘之和,该整数称为阶乘和数。 
例如,145=1!+4!+5!,则145是一个三位阶详细和数。 
请问:共有多少个阶乘和数?

输入
输出
所有的阶乘和数(按字典序,即1打头的在前,2打头的次之,..., 空格分隔)

例如输出:

1 145 2  ...  

样例输入

样例输出

提示

提示:8*9!=8*362880<10000000



[解决办法]
写了一个,不知道是否符合你的要求:


package com.pyh.demo1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo5 {
/**
 * 获取阶乘的方法
 */
public static int factorial(int i) {
if (i == 1) {
return 1;
}
return factorial(i - 1) * i;
}

/**
 * 获取阶乘和
 * 
 * @return 返回包含阶乘和的集合
 */
public static List<String> factorialSum() {
List<String> info = new ArrayList<String>();// 准备一个集合
for (int i = 1; i <= 100000000; i++) {
String temp = i + "";// 将整形转换为字符串
int len = temp.length();// 获取长度
int sum1 = 0;
int sum2 = 0;
for (int j = 0; j < len; j++) {// 对数据进行拆分求阶乘和,如:123=1!+2!+3!
sum1 = Integer.parseInt(temp.substring(j, j + 1));
if (sum1 != 0) {
sum2 += factorial(sum1);
}
}
if (i == sum2) {// 对阶乘和与当前的数字进行比较
info.add(i + "");// 如果符合条件就加入到集合中
}
}
Collections.sort(info);// 对集合进行字典排序
return info;
}

public static void main(String[] args) {
System.out.println(factorialSum());
}
}



下面是结果集:

[解决办法]
 1  145
 2
 40585

热点排行