PKU 1220 NUMBER BASE CONVERSION
http://poj.org/problem?id=1220
多倍長の基数変換。
javaに逃げました。
でもtoString(int radix)がそこまで使えるものじゃなくて、あまり楽じゃない感じでした。
でも多倍長の割り算をC++とかで実装するよりはましだと思いました。
import java.util.*; import java.math.*; public class Main{ public static void main(String[] args){ (new Main()).run(); } public int ctoi(char in){ if(in<='9')return in-'0'; if(in<='Z')return in-'A'+10; return in-'a'+36; } public char itoc(int in){ if(in<10)return (char)(in+'0'); if(in<36)return (char)(in-10+'A'); return (char)(in-36+'a'); } public void run(){ Scanner cin=new Scanner(System.in); int n=cin.nextInt(); for(int i=0;i<n;++i){ BigInteger a=cin.nextBigInteger(); BigInteger b=cin.nextBigInteger(); String in=cin.next(); System.out.println(a+" "+in); BigInteger inb=new BigInteger("0"); for(int j=0;j<in.length();++j){ inb=inb.multiply(a).add(new BigInteger(String.valueOf(ctoi(in.charAt(j))))); } String out=new String(); if(inb.equals(BigInteger.ZERO))out="0"; else{ while(inb.compareTo(BigInteger.ZERO)>0){ out=itoc(inb.mod(b).intValue())+out; inb=inb.divide(b); } } System.out.println(b+" "+out+"\n"); } } }