poj 1220 java大数处理进制转换

本文详细介绍了使用Java语言解决大数与字符串转换为特定进制的问题,包括读取大数、字符串处理以及将转换后的数值以特定进制输出的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.*;
import java.math.*;
import java.util.*;
import java.text.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        char c;
        int testCase, i, w;
        BigInteger ba1, ba2, t, sum;
        testCase = cin.nextInt();
        while((testCase --) != 0){
            ba1 = cin.nextBigInteger();     //  读入大数。
            ba2 = cin.nextBigInteger();
            String st = cin.next();         //  读入字符串,无空格,而cin.nextline()有。
            t = new BigInteger("1");        //  等价于 t = BigInteger.valueOf(1)。
            sum = new BigInteger("0");
            for(i = st.length() - 1; i >= 0; i --){      //  先将num转换为10进制。
                c = st.charAt(i);
                if(c >= '0' && c <= '9')  w = c - '0';
                else if(c >= 'A' && c <= 'Z') w = c - 'A' + 10;
                else w = c - 'a' + 36;
                sum = sum.add(BigInteger.valueOf(w).multiply(t));
                t = t.multiply(ba1);
            }
            BigInteger zero = BigInteger.valueOf(0); 
            int top = 0, stack[] = new int[2000];
            while(sum.compareTo(zero) != 0){             //  转化为ba2进制的数,存在stack[]中。
                stack[++ top] = sum.mod(ba2).intValue();
                sum = sum.divide(ba2);
            }
            System.out.print(ba1+" "+st+"\n"+ba2+" ");
            if(top == 0) System.out.print(0);            //  要注意为0的情况。
            while(top != 0){                             //  按所给字符输出。
                w = stack[top --];
                if(w < 10) c = (char)('0' + w);
                else if(w < 36) c = (char)(w - 10 + 'A');
                else c = (char)(w - 36 + 'a');
                System.out.print(c);
            }
            System.out.print("\n\n");
        }
        System.exit(0);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值