2966. 二进制与十六进制

Li Dao

几个坑说一下
先放程序

include

using namespace std;
int T,n;
vector tmp;
void print_Binary(int aa)
{
if(aa==0)
{
cout<<‘0’;
return;
}
tmp.clear();
while(aa)
{
tmp.push_back(aa%2);
aa/=2;
}
for(int i=tmp.size()-1;i>=0;i–) cout<>T;
for(int step=0;step>n;
printf(“case #%d:\n”,step);
print_Binary(n);
printf(” %X\n”,n);
}
return 0;
}

几个知识点:
1.直接输出八进制%o
直接输出十六进制%x
还可以%3x
%03x
具体效果自己试试看

重点:更为神奇的是,%X 还是 %x 可以控制16进制的大小写
但是输出二进制要自己写函数

2.像输出二进制里面用到了while(aa)
这种的,一定要特判0,否则0这个数不会输出二进制

类似的,求一个数的位数,也要特判断0,当然如果把数字转为字符串看长度就不用特判

3.这里输出二进制要把结果逆转,可以用递归的方法,但为了防止栈溢出,一般不那么干
这里用vector作暂存,完成了逆转

10165101115

几个坑说一下
谢谢大佬!

故人不在束旧装

谢谢大佬!!!

徐摆渡
  1. 0要特判
  2. 直接用了STL里的stack,运行速度上可能会慢一点
#include <bits/stdc++.h>
using namespace std;
//use stack to realize

int T,cnt;
stack<int> getBinary(int n)
{
    stack<int> myStack1;
    if(n==0) myStack1.push(0);//judging 0 is important
    while(n!=0){
        int temp=n%2;
        myStack1.push(temp);
        n/=2;
    }
    return myStack1;
}

stack<char> getHexadecimal(int n)
{
    stack<char> myStack2;
    char ch[16];
    for(int i=0;i<16;++i){
        if(i<10) ch[i]=i+'0';
        else ch[i]='A'+i-10;
    }
    if(n==0) myStack2.push('0');
    while(n!=0)
    {
        int temp=n%16;
        myStack2.push(ch[temp]);
        n/=16;
    }
    return myStack2;
}
int main()
{
    cin>>T;
    int n;
    while(T--){
        cin>>n;
        stack<int> myStack1=getBinary(n);
        stack<char> myStack2=getHexadecimal(n);
        printf("case #%d:\n",cnt++);
        while(!myStack1.empty()){
            cout<<myStack1.top();
            myStack1.pop();
        }
        cout<<' ';
        while(!myStack2.empty()){
            cout<<myStack2.top();
            myStack2.pop();
        }
        cout<<endl;
    }
    return 0;
}
lnu_cxn

0要特殊判断

include

include

using namespace std;
int main()
{
int t;
int count = 0;
cin >> t;
while (t–) {
int num;
cin >> num;
int temp1 = num, temp2 = num;
stack q;
cout << “case #” << count++ << “:” << endl;
if (!num) {
cout << “0 0” << endl;
continue;
}
while (temp1) {
int k = temp1 % 2;
q.push(k);
temp1 /= 2;
}
while (!q.empty()) {
int k = q.top();
cout << k;
q.pop();
}
cout << ” “;
while (temp2) {
int k = temp2 % 16;
q.push(k);
temp2 /= 16;
}
while (!q.empty()) {
int k = q.top();
if (k > 9) {
char ch = k + 55;
cout << ch;
}
else
cout << k;
q.pop();
}
if (t == 0)
break;
cout << endl;
}
return 0;
}

你当前正在回复 博客/题目
存在问题!