package com.tsxs.arithmetic; /** * 计算水仙花数.<br> * 水仙花数:一个n(n>=3)位数,它的每个位数上的数字的n次幂之和等于它本身.<br> * 例如:371=3^3+7^3+1^3.<br> * 思路:<br> * 1.数据的位数:操作数除以10的商的位数加1.<br> * 2.每个位数上的数:操作数每次除以10的余数.<br> * 3.字符串切割切换非算法,此处不使用. * */ public class DaffodilNumber { public static void main(String[] args) { for(int i = 100;i < 100000;i++){ if(isDaffodilNumber(i)){ System.out.println(i); } } } /** * isDaffodilNumber:判断是否为水仙花数 * @param number 操作数 * @return boolean true为水仙花数 * */ static boolean isDaffodilNumber(int number){ //获取数据的位数 int length = 0; //备份数据 int temp1 = number; int temp2 = number; //保存各位次幂纸之和 int sum = 0; //判断水仙花结果 boolean isDaffodil = false; //位数 while(temp1 / 10 > 0){ temp1 /= 10; length++; } length++; //判断是否为水仙花 for(int i = 0;i <= length;i++){ sum+=Math.pow(temp2 % 10, length); // sum = (int) (sum + Math.pow(temp2 % 10, length)); temp2/=10; } //如果和等于本身为水仙花 if(sum == number){ isDaffodil = true; } return isDaffodil; } }
计算结果,100~100000,水仙花数:
153
370
371
407
1634
8208
9474
54748
92727
93084
注:此处写代码时,发现了一个小问题(jdk version:1.8.0_45),请看下边代码:
sum+=Math.pow(temp2 % 10, length);
sum = (int) (sum + Math.pow(temp2 % 10, length));
以上代码都正确执行.
1:Math.pow方法实现:public static native double pow(double a, double b);
2:Math.pow方法返回值为double和int进行"+"算数运算,运算结果为double,赋值int类型 的sum要进行强制类型转换.
3:i,j为数值型.
运算规则:i+=j; //等价于 i = i + j;
此处可见,精度不同,但赋值运算符"+="尽然已经做了隐式类型转换(自动类型转换).
4:精度变高,所占位数(bit)变长:
byte→short(char)→int→long→float→double
5:基本数据类型:
数据类型 名称 长度 默认值 位数范围
boolean 布尔型 1字节(8位) false 只有false、true
byte 字节型 字节(1byte=8bit) 0 -128~127 (-2^7~2^7-1)
char 字符型 2字节(16位) '\u0000' '\u0000'~'\uffff'
short 短整型 2字节(16位) 0 -32768~32767 (-2^15~2^15-1)
int 整型 4个字节(32位) 0 -2147483648~2147483647 (-2^31~2^31-1)
long 长整型 8个字节(64位) 0 -9223372036854774808~9223372036854774807(-2^63~2^63-1)
float 浮点型 4个字节(32位) 0.0f 3.402823e+38 ~ 1.401298e-45 (e+38是乘以10的38次方,e-45是乘以10的负45次方,e=10)
double 双精度型 8个字节(64位) 0.0d 1.797693e+308~ 4.9000000e-324
相关推荐
水仙花数 水仙花数是三位数,它的各位数字的立方和等于这个三位数本身
实验4-2-5 水仙花数 (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。 输入格式: 输入...
水仙花数
输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
水仙花数(Python3) 水仙花数:三位数的整数=个位数的三次方+十位数的三次方+百位数的三次方
首先什么是水仙花数? 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。 输入代码: #include #include<math.h> main() { int a,b,c,n; n = 100; ...
“3位水仙花数”是指一个三位整数,其各位数字的3次方和等于该数本身。例如:ABC是 一个“3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。 请按照从大到小的顺序输出所有的3位水仙花数,请用一个“逗号+...
求100~1000的水仙花数,用代码C#编写的,可以看看
首先水仙花数是什么? 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 ...
基于labVIEW编写的简单程序求1000以内的水仙花数。
简单C++求水仙花数,有两种算法.一种是输入一个数判断是不是水仙花数.另一种是输入一个范围求范围内的水仙花数..本人新手中的新手.程序很简单但很有意思
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字...
求水仙花数 求100~999中的水仙花数。所谓水仙花数是指一个三位数,它的每位数字的立方之和等于该数。 例如,因为153=13+53+33,所以153位水仙花数。
System.out.println("水仙花数为:"); for(int i=100;i;i++){ a=i/100; b=i%100/10; c=i%100%10; if(a*a*a+b*b*b+c*c*c==i) System.out.println(i+""); } } }语言实现水仙花数。
MATLAB计算水仙花数(四位数),里面涉及取余,和取整下限..
水仙花数
labview VI程序可以求出0到1000之内的水仙花数
一道Java编写的数学题 输出所有的水仙花数,把谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身,例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
“水仙花说”是一个三位说,其各位数字立方和等于改数本身,本程序用c实现求水仙花数
如果一个三位数等于它自己的每一位数字的立方和,则此数为“水仙花数”。求100~999之间的全部水仙花数。