本帖最后由 theape 于 2016-8-15 15:04 编辑
求一个整数的位数以及得到对应位的数
思路: 被除数 / 除数 = 商 余数 余数在计算机中被称之为模 从小位到大位,最小位是个位; 除以10取商可以作为新的数,取模可以得到个位数。 建议新的数强转为整数。 经过循环取商可以得到位数,每次取模可以得到对应位数。 方法代码如下: [Java] 纯文本查看 复制代码 public static void getCount(int num) {
if (num == 0) {
System.out.println("0是个1位数");
return;
}
int n = 0; // 代表位数
int temp = num; // temp代表每次循环得到的新的数
int unit; // 代表当前位的数
while (temp > 0) {
unit = temp % 10; //得到当前数的个位数
temp = temp / 10; //从十位开始得到新的数
n++;
System.out.println("第" + n + "位的数是:" + unit);
}
System.out.println(num + "是个" + n + "位数");
}
调用方法 getCount(412415); 运行结果是: 第1位的数是:5
第2位的数是:1
第3位的数是:4
第4位的数是:2
第5位的数是:1
第6位的数是:4
412415是个6位数
while 的判断条件temp>0或temp>=1都可,因为最高位至少是1;
这个方法的应用就是计算水仙花数,代码如下:当然这个代码不完善的地方是不管你输入的是几位数,实际上只是计算3位数的水仙花数,因为是当前位数的3次方(0和1除外)
[Java] 纯文本查看 复制代码 public static void printNum(int num) {
int temp = num;
int unit;
int sum = 0;
while (temp > 0) {
unit = temp % 10;
temp = temp / 10;
sum = sum + unit * unit * unit;
}
if (num == sum) {
System.out.println(num);
}
}
}
下面来个广义上的水仙花数,这个数 = 每位数的总位数次方的和。比如: 1 = 1^1
153 = 1^3 + 5^3 + 3^3 8208 = 8^4 + 2^4 + 0^4 + 8^4 上代码:
[Java] 纯文本查看 复制代码 public static void main(String[] args) {
for (int i = 0; i <= 10000; i++) {
printNum(i);
}
getCount(412400);
}
public static void printNum(int num) {
int n = 0; // 保持总位数
int temp = num;
while (temp > 0) {
temp = temp / 10;
n++; // 先计算总位数
}
temp = num;
int[] arr = new int[n]; //拿出每一位的数保存到数组中,arr[0]代表个位数
int sum = 0; // 求乘方和
for (int i = 0; i < n; i++) {
arr[i] = temp % 10;
int involution = 1; //求乘方
for (int j = 1; j <= n; j++) {
involution = involution * arr[i];
}
sum = sum + involution;
temp = (int)(temp / 10); // 不带int也可以强转
}
if (num == sum) {
System.out.println("水仙花数:" + num);
}
}
运行结果: 水仙花数:0
水仙花数:1
水仙花数:2
水仙花数:3
水仙花数:4
水仙花数:5
水仙花数:6
水仙花数:7
水仙花数:8
水仙花数:9
水仙花数:153
水仙花数:370
水仙花数:371
水仙花数:407
水仙花数:1634
水仙花数:8208
水仙花数:9474
|