C/C++語言實現十進位制正整數轉化為2-16進位制的數並輸出
阿新 • • 發佈:2019-01-23
<h3>/<span style="font-size:18px;">/將一個十進位制的正整數轉化為H進位制並輸出--拓展 在此先研究對於正整數的進位制轉換 以及2-16的進位制與十進位制的轉換 #include <IOSTREAM> using namespace std; //定義轉化為儲存的進位制數的陣列的最大個數 const long N=1000L; //將十進位制的正整數轉化為2-9進位制的數並輸出 void TransFromDecToBin(int Num,int H) { //定義陣列是起到類似棧那樣的功能:後進先出 int Hexadecimal[N]; int test=0; int i=0; test=Num/H; while (test!=0) { Hexadecimal[i++]=Num%H; Num=test; test=Num/H; } //Binary[i]=1; Hexadecimal[i]=Num; for (int j=i;j>=0;j--) { cout<<Hexadecimal[j]; } //cout<<"ewe"<<endl; cout<<endl; } //用於存放當正整數進位制數為0-9時 轉化為字元0-9 ---只需要加上48並返回 注意返回的已經是字元了0-9 char ReturnCharHexaWithNum(int num) { return num+48; } //用於存放當正整數為10-15時 轉化為相對應的字元進位制數a-f 只需要加上87並返回 注意返回的已經是字元了a-f char ReturnCharHexaWithChar(int num) { return num+87; } //將十進位制的正整數轉化為11-16進位制的數並輸出 void TransFromDecimalToHexa(int Num,int H) { char Hexadecimal[N]; int test=0; int i=0; test=Num/H; while (test!=0) { if ((Num%H>=0)&&(Num%H<=9)) { Hexadecimal[i++]=ReturnCharHexaWithNum(Num%H); } else { Hexadecimal[i++]=ReturnCharHexaWithChar(Num%H); } Num=test; test=Num/H; } if ((Num>=0)&&(Num<=9)) { Hexadecimal[i]=ReturnCharHexaWithNum(Num); } else { Hexadecimal[i]=ReturnCharHexaWithNum(Num); } for (int j=i;j>=0;j--) { cout<<Hexadecimal[j]; } //cout<<"ewe"<<endl; cout<<endl; } //Main函式實現呼叫 int main() { int num; cout<<"輸入一個正整數: "; cin>>num; int h; cout<<"輸入需要將此正整數轉化的進位制數: "; cin>>h; if ((num>0) && (h>=2) && (h<=16)) { if ((h>=2)&&(h<=9)) { TransFromDecToBin(num,h); } else if (h==10) { printf("轉化為10進位制數即為此數本身,即: %d\n",num); } else if ((h>=11)&&(h<=16)) { TransFromDecimalToHexa(num,h); } } else { cout<<"請輸入正整數 或者 2-16進位制數\n"<<endl; } /* 這是一個不錯的測試:儲存進位制時以字元為主,將0-9字元轉化為數字0-9:只需要其整數的數字加上48即可 int i=48; char j='c'; char H[2]; H[0]=i; H[1]=j; for (int k=0;k<2;k++) { cout<<H[k]<<endl; }*/ return 0; }</span></h3>
以上即為我所寫的程式碼,歡迎各位朋友提意見!!!