藍橋杯 【基礎練習】 十進位轉十六進位

來源:互聯網
上載者:User

問題描述  十六進位數是在程式設計時經常要使用到的一種整數的表示方式。它有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;}



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.