寻花问柳之花朵数

.




package softwareDesign;

/**
* 题目:
*
* 一个N位的十进制正整数,
*
* 如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数.
*
* 比如:1^3+5^3+3^3=153;1^4 + 6^4 + 3^4 + 4^4 = 1634
*
* @author ocaicai@yeah.net @date: 2011-5-5
*
*/
public class FindFlower {

/**
* @param args
*/
public static void main(String[] args) {
findFlowerInDomain(3);
findFlowerInDomain(4);
findFlowerInDomain(5);
}

/**
* 在domain范围内寻花问柳
*
* @param domain
* 数据区域
*/
private static void findFlowerInDomain(int domain) {

for (int index = (int) Math.pow(10, domain - 1); index < Math.pow(10,
domain); index++) {
String tempStr = String.valueOf(index);// 数字转换成的字符串
char tempChar;// 字符串的某一个字符
int charToIntValue = 0;// 字符转换成整数的值
int tempAllCharsValue = 0;// 全部字符domain次方后的和
for (int strIndex = 0; strIndex < tempStr.length(); strIndex++) {
tempChar = tempStr.charAt(strIndex);
charToIntValue = Integer.parseInt(String.valueOf(tempChar));
tempAllCharsValue += (int) Math.pow(charToIntValue, domain);
if (tempAllCharsValue == index
&& strIndex == tempStr.length() - 1) {
// 值相等而且次数相等才输出
// System.out.println("flowerNumber:" + index);
printFlowerNumber(tempStr, domain, index);
}
}
}

}

/**
* 控制打印输出,比如:1^3+5^3+3^3=153;1^4 + 6^4 + 3^4 + 4^4 = 1634
*
* @param str
* 用于输出的字符串
* @param domain
* 数的domain次方
* @param result
* 式子的结果
*
*/
private static void printFlowerNumber(String str, int domain, int result) {
StringBuffer sb = new StringBuffer();
sb.append("flowerNumber:");
for (int i = 0; i < str.length() - 1; i++) {
sb.append(str.charAt(i)).append("^").append(domain).append("+");
}
sb.append(str.charAt(str.length() - 1)).append("^").append(domain);
System.out.println(sb.toString() + "=" + result);
}
}




[color=red]输出结果:[/color]



flowerNumber:1^3+5^3+3^3=153
flowerNumber:3^3+7^3+0^3=370
flowerNumber:3^3+7^3+1^3=371
flowerNumber:4^3+0^3+7^3=407
flowerNumber:1^4+6^4+3^4+4^4=1634
flowerNumber:8^4+2^4+0^4+8^4=8208
flowerNumber:9^4+4^4+7^4+4^4=9474
flowerNumber:5^5+4^5+7^5+4^5+8^5=54748
flowerNumber:9^5+2^5+7^5+2^5+7^5=92727
flowerNumber:9^5+3^5+0^5+8^5+4^5=93084





.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值