求取水仙花数 && 将整数分解成质因数

【程序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循环来分别控制百位,十位和个位

 private static void method2() {
for(int a = 1;a < 10;a++){
for(int b = 0;b < 10;b++){
for(int c = 0;c < 10;c++){
int n = a*a*a + b*b*b + c*c*c;
int m = 100*a + 10*b + c;
if(m == n){
System.out.println(n);
}
}
}
}
}

解法2:

  网上有一种实现方式是:通过做除法和取余的手段分别得到三个位上的数字,使用m*m*m + n*n*n + q*q*q等于此整数的方式来确定.

  num%10 得到个位数

  num/10再%10 得到十位数

  num/100  得到百位数

     private static void method1() {
for(int i = 100;i < 1000;i++){
int a = i % 10; //153%10 3
int b = (i/10)%10; //15%10 5
int c = i/100; //153/100 1
if(i == a*a*a + b*b*b + c*c*c){
System.out.println(i);
}
}
}

【程序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()

 public static void method(int num){
int k = 2;
if(num == k){
System.out.print(k + "*");
}
while(num > k ){
if(num % k == 0){
System.out.print(k + "*");
num = num / k;
}
if(num % k != 0){
k++;
}
}
System.out.println(k);
}
上一篇:C 字符/字符串常用函数


下一篇:《Java大学教程》—第8章 通过继承扩展类