题目描述:
资源限制 时间限制:1.0s 内存限制:256.0MB
计算一个无符号整数的阿尔法乘积。
对于一个无符号整数x来说,阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那个整数的阿尔法乘积。
例子
例如,输入4018224312的阿尔法乘积等于8
它是经过以下的几个步骤计算出来的:
被计算值 ⇒ 被计算值中需要阿尔法计算的值 ⇒ 计算结果
4018224312⇒418224312⇒3072
3072⇒372⇒42
42 ⇒ 4*2 ⇒ 8
输入: 4018224312 输出: 8
解题思路
对输入的n取余,大于零相乘,并记录每次相乘的值,循环计算,等到n等于个位数时即可跳出循环。
import java.util.Scanner;
/**
*
* @author hf
*/
public class Blogs1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
// long n = 4018224312L; //eg
long temp = 0; // 定义一个临时变量作为中间值
int sum = 1; // 每一轮的阿尔法乘积值
// 条件一:如果x是一个个位数,那么它的阿尔法乘积就是它本身;即等到n等于个位数时即可跳出循环
while (n >= 10) {
temp = n; // 赋值临时变量
// 条件二:n大于10时,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那个整数的阿尔法乘积,
// 即n这整个数,所有大于零的数相乘,并记录每次相乘的值
while (temp > 0) {
// 得到每一位并判断是否大于零
if (temp % 10 != 0) {
sum *= (temp % 10);
}
temp /= 10; // 不管数字是否大于零,循环都要消掉最后一位
}
n = sum; // 将本轮得到的阿尔法乘积值赋给n
sum = 1; // 阿尔法乘积值清1
}
System.out.println(n);
scanner.close();
}
}