题目描述
NowCoder总是力争上游,凡事都要拿第一,所以他对“1”这个数情有独钟。爱屋及乌,他也很喜欢包含1的数,例如10、11、12……。不仅如此,他同样喜欢任意进制中包含1的数。当然,其中包含1的个数越多他越喜欢。你能帮他统计一下某个数在特定的进制下1的个数吗?
输入描述:
输入有多组数据,每组数据包含一个正整数n (1≤n≤2147483647)和一个正整数r (2≤r≤16)。
其中n为十进制整数,r为目标进制。
输出描述:
对应每组输入,输出整数n转换成r进制之后,其中包含多少个“1”。
输入例子:
1 2
123 16
输出例子:
1
0
分析:典型的进制转换问题,但在本题不需求出转换后的结果,利用短除法,统计余数为1的情况即可。。。。
编码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int ten = scanner.nextInt(); // 十进制
int other = scanner.nextInt(); // 其他进制
int count = transferOther(ten,other);
System.out.println(count);
}
}
private static int transferOther(long ten, int other) {
long shang = -1;
long yushu = -1;
int count = 0;
while(shang!=0){
shang = ten/other;
yushu = (int)ten%other;
if (yushu == 1) {
count++;
}
ten = shang;
}
return count;
}
}