任意の進数変換のまとめ(cとjava)
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を使ってもっと簡単に実現できます.
toString
分類: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
} 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) //ほほほ、 でしょう
}
)