PKU 1312 Numerically Speaking

http://poj.org/problem?id=1312
数字の進数変換しろというような問題。

javaに逃げました。
足し算掛け算にとどまらない多倍長がC++で書けていないのでどうしようもないです。

import java.util.*;
import java.math.*;

class Main{
    public static void main(String[] args){
        new Main().run();
    }

    Scanner cin =new Scanner(System.in);

    String in;

    String insertC(String str){
        String ret="";
        for(int i=str.length()-1;i>=0;--i){
            int di=str.length()-1-i;
            if(di!=0 && di%3==0)ret=','+ret;
            ret=str.charAt(i)+ret;
        }
        return ret;
    }

    BigInteger num26=new BigInteger("26");

    String toAlpha(String str){
        if(Character.isLetter(str.charAt(0)))return str;
        String ret="";
        BigInteger num=new BigInteger(str);
        do{
            ret=(char)(num.subtract(BigInteger.ONE).remainder(num26).intValue()+'a')+ret;
            num=num.divide(num26);
        }while(!num.equals(BigInteger.ZERO));
        return ret;
    }

    String toNum(String str){
        if(Character.isDigit(str.charAt(0)))return insertC(str);
        BigInteger ret=BigInteger.ZERO;
        for(int i=0;i<str.length();++i){
            ret=ret.multiply(num26).add(new BigInteger((str.charAt(i)-'a'+1)+""));
        }
        return insertC(ret.toString());
    }

    void solve(String arg){
        System.out.printf("%-21s %s\n",toAlpha(arg),toNum(arg));
    }
    
    void run(){
        while(true){
            in=cin.next();
            if(in.equals("*"))break;
            solve(in);
        }
    }
}