任意进制转化/模板(c++/ java)
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6198
c++
#include<bits/stdc++.h> using namespace std; #define MAXN 3005 int t[MAXN],A[MAXN]; char OldData[MAXN], NewData[MAXN],oldData[MAXN]; int olds, news; void trans() { int i, len, k; memset(t,0,sizeof t); memset(A,0,sizeof A); len = strlen(OldData); for(i=len; i>=0; --i) t[len-1-i] = OldData[i] - (OldData[i]<58 ? 48 : OldData[i]<97 ? 55 : 61); for(k=0; len;) { for(i=len; i>=1; --i) { t[i-1] += t[i]%news*olds; t[i] /= news; } A[k++] = t[0] % news; t[0] /= news; while(len>0 && !t[len-1]) --len; } NewData[k] = '\0'; for(i=0; i<k; ++i) NewData[k-1-i] = A[i] + (A[i]<10 ? 48 : A[i]<36 ? 55 : 61); } int main() { // for(int i=1;i<=2000;i++)cout<<1; while(cin>>oldData>>olds>>news) { if(oldData[0]=='-'){ int l=strlen(oldData); for(int i=1;i<l;i++)OldData[i-1]=oldData[i]; OldData[l-1]='\0'; trans(); if(strcmp(NewData,"0")!=0)cout<<"-"<<NewData<<endl; else cout<<0<<endl; } else { strcpy(OldData,oldData); trans(); cout<<NewData<<endl; } } }
java:
import java.io.*; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.StringTokenizer; import java.io.IOException; import java.io.InputStream; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String s = sc.next(); int r1 = sc.nextInt(); int r2 = sc.nextInt(); String a = new BigInteger(s,r1).toString(r2); System.out.println(a.toUpperCase()); } } }