1. 程式人生 > >藍橋杯BASIC-10 十進位制轉十六進位制

藍橋杯BASIC-10 十進位制轉十六進位制

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

在這裡插入圖片描述