进制转换题解
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); // } } }