1. 程式人生 > >藍橋杯 基礎練習 十進位制轉十六進位制

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

問題描述

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

直接棧實現,特判一下n = 0的情況,不然會錯

或者%d輸入,%X輸出實現

Code1:

#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<list>
#define mod 998244353
#define INF 0x3f3f3f3f
#define Min 0xc0c0c0c0
#define mst(a) memset(a,0,sizeof(a))
#define f(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef long long ll;
static const int MAX_N = 1e6 + 5;
static const double pi = acos(-1);
int main(){
    ll n;
    while(scanf("%lld", &n) != EOF){
        //printf("%c", 4 + '0');
        if(n == 0){
            printf("0\n");
            continue;
        }
        stack<char>ss;
        while(n){
            ss.push(((n % 16) >= 10) ? 'A' + (n % 16 - 10) : (n % 16) + '0');
            n /= 16;
        }
        while(!ss.empty()){
            printf("%c", ss.top());
            ss.pop();
        }
        printf("\n");
    }
    return 0;
}

Code2:

#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<list>
#define mod 998244353
#define INF 0x3f3f3f3f
#define Min 0xc0c0c0c0
#define mst(a) memset(a,0,sizeof(a))
#define f(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef long long ll;
static const int MAX_N = 1e6 + 5;
static const double pi = acos(-1);
int main(){
    ll n;
    while(scanf("%lld", &n) != EOF){
       printf("%X\n", n);
    }
    return 0;
}