任意の進数変換のまとめ(cとjava)

3740 ワード

poj 1546任意の進数変換のまとめはjavaで簡単に実現できる.
分類:ACM | ラベル:  poj    1546    進数    変換    Big Integer  
2009-07-27 23:07読解(
762)コメント(
0)
もとの問題はpojに会った:http://acm.pku.edu.cn/JudgeOnline/problem?id=1546
題目の意味は簡単に説明します.16以内の進数間の転換を実現します.
主な考え方:10進数を中間結果として、まず10進数に変換して、それから要求の進数に変換します.任意の進数を10進数に変換するには、ビット権表示法、10進数を任意の進数に変換します.
         整理と取残りは、スタックのデータ構造を採用する.
萼include落include萼include啣啝includechar fin[100]int convent 1(char ch[],int base){ int len=strelen(ch) int i; int temp; inte=0; for(i=0;i<len;i++) {  if(ch[i]=''A')   temp=10;  if(ch[i]='B')   temp=11;  if(ch[i]='C')   temp=12;  if(ch[i]=='D')   temp=13;  if(ch[i]=='E')   temp=14;  if(ch[i]='F')   temp=15  if(ch[i]=='0')   temp=0  if(ch[i]='1')   temp=1;  if(ch[i]='2')   temp=2;  if(ch[i]='3')   temp=3;  if(ch[i]='4')   temp=4;  if(ch[i]='5')   temp=5;  if(ch[i]='6')   temp=6;  if(ch[i]='7')   temp=7;  if(ch[i]='8')   temp=8;  if(ch[i]='9')   temp=9;  re=re+temp*pow((double)base,len-1-i)
 }  return re;
}void conventt 2(int num,int base){ char char char[100]; char res[100]; int temp; int top=0 while(num) {  temp=num%base;  num  = num/base;  if(temp==0)   チャン[top]='0';  if(temp==1)   チャン[top]='1';  if(temp==2)   chan[top]='2';  if(temp==3)   chan[top]='3';  if(temp==4)   チャン[top]='4';  if(temp==5)   chan[top]='5';  if(temp==6)   chan[top]='6';  if(temp==7)   chan[top]='7';  if(temp==8)   chan[top]='8';  if(temp==9)   チャン[top]='9';  if(temp==10)   chan[top]='A';  if(temp==11)   chan[top]='B';  if(temp==12)   chan[top]='C';  if(temp==13)   チャン[top]='D';  if(temp==14)   chan[top]='E';  if(temp==15)   chan[top]='F';  top++;
 }  int i=0; for(top--;top>=0;top--) {  res[i]=chan[top];  i++; }  レスス[i]='\0'; strcpy(fin,res)//strcpy()関数のパラメータは文字列です.文字列の最後に'\0'を追加します.でないと、異常が発生します.
 
int main(){
 int base、changeTo char str[100]; int mid; int len; while(scanf(「%s%d%d」,str,&base,&changeTo)!=EOF) {  mid=convent 1(str,base)  convent 2(mid,changeTo)        len=streen(fin)  if(len>7)   printf(“%s”,“  ERROR");  else   printf("%7 s",fin); }  return 0;
実は、javaのBig Integerを使ってもっと簡単に実現できます.BigInteger(String val, int radix)            指定した基数のBigIntegerの文字列表示形式をBigIntegerに変換します.
toString
public String toString(int radix)
このBigIntegerの与えられた基数の文字列表示形式を返します.この基数が基準値から外れている場合、  Character.MIN_RADIX はい、  Character.MAX_RADIX(これを含む)の範囲のデフォルト値は10(Integer.toString)である. この場合です.  Charcter.forDigit 数値から文字へのマッピングを行い、必要に応じて前に負の記号を追加します.  (String, int)  は があります.)
パラメータ:radix - は の を します.
り :
このBig Integerが えられた の は を します.
また、 してください:Integer.toString(int, int)、  Character.forDigit(int, int)、  BigInteger(java.lang.String, int) を すると36 の の への が です. えば、
import java.math.Big Integer;public class Main 1566{
 /**   * @param args
   ここでは をデモするだけです.  */ public static void main(String[]args){  //TODO Auto-generated methodb stub  String str=「1 A」 // の   Big Integer big=new Big Integer(str,15)//15 の strでBig Integerを します.  String str 1=big.toString(2)         //この15 を2 の に します.  System.out.println(str 1)             //ほほほ、 でしょう
 }
)