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