进制转换题解
dd得到了一个数,但不确定这个数的进制,只知道可能是2~16进制的其中之一所以她想你帮她算出所有可能的结果,并转成十进制后对10^9+7进行取模,把所得 到的答案从小到大排列,若存在相同的结果,只保留一个即可。
输入描述 一个数,表示得到的数字
保证不会出现'0'~9','A'~F'以外的字符,输入数字长度不超过100000,且保证 无前导零
输出描述 每行一个数,表示可能的结果
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static final int MOD = 1000000007;
public static long strToDigit(String str, int base) {
long ret = 0;
long radio = 1;
for (int i = str.length() - 1; i >= 0; i--) {
char ch = str.charAt(i);
int value = ch >= 'A' ? ch - 'A' + 10 : ch - '0';
ret += (radio * value) % MOD;
ret %= MOD;
radio *= base ;
radio %= MOD;
}
return ret;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
int lowOrd = 2;
for (int i = 15; i > 0; i--) {
char ch = i >= 10 ? (char)('A' + i - 10) : (char)('0' + i);
if(str.contains(String.valueOf(ch))) {
lowOrd = i + 1;
break;
}
}
Set<Long> retSet = new HashSet<Long>();
for( int i = lowOrd; i < 17; i++) {
long item = strToDigit(str, i);
retSet.add(item);
}
Long[] temp = retSet.toArray(new Long[0]);
Arrays.sort(temp);
Arrays.stream(temp).forEach(ch -> System.out.println(ch));
// for (long i : temp) {
// System.out.println(Arrays.toString(temp));
// }
// 注意 hasNext 和 hasNextLine 的区别
// while (in.hasNextInt()) { // 注意 while 处理多个 case
// int a = in.nextInt();
// int b = in.nextInt();
// System.out.println(a + b);
// }
}
}
查看9道真题和解析
字节跳动公司福利 1332人发布