藍橋杯BASIC-10 十進位制轉十六進位制
阿新 • • 發佈:2019-01-08
問題描述
十六進位制數是在程式設計時經常要使用到的一種整數的表示方式。它有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
自己理解:先弄清十進位制轉十六進位制的基本概念
十進位制十六進位制有兩種方法
- 間接法—把十進位制轉成二進位制,然後再由二進位制轉成八進位制或者十六進位制。
- 直接法—把十進位制轉十六進位制按照除16取餘,直到商為0為止。這裡採用的都是直接法,在定義變數的時候有一點不一樣,其他思路一樣
- 例:150 的十六進位制為96
程式碼1
#include <stdio.h> int main(void) { char b[10],i,k=0,c[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; long a; scanf("%d",&a); if (a==0)//如果a=0;則輸出0 printf("0"); else { while (a) { b[k++]=c[a%16]; a/=16; } for (i=k-1;i>=0;i--) printf("%c",b[i]); } return 0; }
程式碼2
#include<stdio.h> int main() { int a; char u16[10]; int w=0,c,b,i; scanf("%d",&a); if(a==0) { u16[0]='0'; w++; } else { c=a; while(c) { b=c%16; if(b<10) { u16[w]='0'+b; } else { u16[w]='A'+b-10; } c=c/16; w++; } } for(i=w-1;i>=0;i--) { printf("%c",u16[i]); } return 0; }