进制转换题解

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);
        // }
    }
}

全部评论

相关推荐

黑皮白袜臭脚体育生:主播主播,你的算法放松法确实很强,但还是太吃操作了,有没有更加简单又有效的放松法
2025.07.13 在牛客打卡2天!
点赞 评论 收藏
分享
码农索隆:力扣的题目还挺贴近现实
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务