問題描述 十六進位數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進位數的0至15。十六進位的計數方法是滿16進1,所以十進位數16在十六進位中是10,而十進位的17在十六進位中是11,以此類推,十進位的30在十六進位中是1E。
給出一個非負整數,將它表示成十六進位的形式。輸入格式 輸入包含一個非負整數a,表示要轉換的數。0<=a<=2147483647輸出格式 輸出這個整數的16進位表示範例輸入30範例輸出1E
方法一:
根據a的最大值可以判斷16進位數最大為8位
#include<iostream>using namespace std;int main(){char a[8];long m;cin>>m;long s = m;int i = 0;while(s/16 != 0){if(s%16 < 10){a[i++] = '0'+s%16;}if(s%16 >=10 && s%16 <16){a[i++] = 'A'+s%16 - 10;}s = s/16;}if(s%16 < 10){a[i] = '0'+s%16;}if(s%16 >=10 && s%16 <16){a[i] = 'A'+s%16 - 10;}while(i>=0){cout<<a[i--];}return 0;}
因為0~9和A~F的ASCII碼不是連著的,所以需要進行判斷。
方法二:
#include<iostream>using namespace std;int main(){char a[8];char b[] = "0123456789ABCDEF";long m;cin>>m;long s = m;int i = 0;while(s/16 != 0){a[i++] = b[s%16];s = s/16;}a[i] = b[s%16];while(i>=0){cout<<a[i--];}return 0;}
該方法通過建立一個字元數組來表示十六進位的每個位的取值情況。
由此可以得到一個除k取餘的一般方法,例如十進位轉化為八進位可以這樣寫:
(假設a的最大值還是2147483647,最大需要11個8進位位)
#include<iostream>using namespace std;int main(){char a[11];long m;cin>>m;long s = m;int i = 0;while(s/8 != 0){a[i++] = '0' + s%8;s = s/8;}a[i] = '0' + s%8;while(i>=0){cout<<a[i--];}return 0;}