藍橋杯 基礎練習 十進位制轉十六進位制
阿新 • • 發佈:2019-01-11
問題描述
十六進位制數是在程式設計時經常要使用到的一種整數的表示方式。它有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; }