求取水仙花数 && 将整数分解成质因数
【程序3】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个"水仙花数",153=1的三次方+5的三次方+3的三次方。
解法1:
较为简单的思路,也是我一开始想到的,但是依旧没能自己实现出来.
int num ; //待判断整数
int m,n,q; //三位数的百位,十位和个位
只需要满足: m*m*m + n*n*n + q*q*q = 100m + 10n + q 即可.使用三个for循环来分别控制百位,十位和个位
1 private static void method2() { 2 for(int a = 1;a < 10;a++){ 3 for(int b = 0;b < 10;b++){ 4 for(int c = 0;c < 10;c++){ 5 int n = a*a*a + b*b*b + c*c*c; 6 int m = 100*a + 10*b + c; 7 if(m == n){ 8 System.out.println(n); 9 } 10 } 11 } 12 } 13 }
解法2:
网上有一种实现方式是:通过做除法和取余的手段分别得到三个位上的数字,使用m*m*m + n*n*n + q*q*q等于此整数的方式来确定.
num%10 得到个位数
num/10再%10 得到十位数
num/100 得到百位数
1 private static void method1() { 2 for(int i = 100;i < 1000;i++){ 3 int a = i % 10; //153%10 3 4 int b = (i/10)%10; //15%10 5 5 int c = i/100; //153/100 1 6 if(i == a*a*a + b*b*b + c*c*c){ 7 System.out.println(i); 8 } 9 } 10 }
【程序4】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
分析:
想象以下,自己平时拿到一个正整数要分解的时候,一般都是从最小的质数,也就是2开始计算.然后对于做了除法之后的部分再次实现之前的操作.大概可以知道,本题需要一个递增的除数以及循环来实现.
正整数num,除数k = 2
1.如果num == 2,那么直接结束程序;
2.如果num > 2,判断num % 2 是否等于0,
如果等于0的话,说明2是nun的其中一个质因数,输出2,并且使num = num / k;
如果不等于0的话,说明不能被2整除,k++之后再次执行上面的判断.
直到循环条件不成立
不知道循环的次数,使用while()
1 public static void method(int num){ 2 int k = 2; 3 if(num == k){ 4 System.out.print(k + "*"); 5 } 6 while(num > k ){ 7 if(num % k == 0){ 8 System.out.print(k + "*"); 9 num = num / k; 10 } 11 if(num % k != 0){ 12 k++; 13 } 14 } 15 System.out.println(k); 16 }