腾讯2017笔试——16进制

题目

思路

关键点:

运算时都用10进制运算

  1. 16进制的输出,用cout<<hex<<“十进制表达”
    c++可以表达十进制、八进制、十六进制,不能直接表达2进制

    #include<iostream>
    using namespace std;
    void main()
    {
    int a,b,c;
    a=10; //十进制
    b=010;//八进制
    c=0x10; //十六进制
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    cout<<"c="<<c<<endl;
    cout<<"a(八进制)="<<oct<<a<<endl;
    cout<<"a(十六进制)="<<hex<<a<<endl;
    cout<<"a(重新变回十进制)="<<dec<<a<<endl;
    }
  2. 前导0的补齐:

    cout.fill('0');//设置填充字符
    cout.width(8);//设置宽度为8
    cout<<hex<<num;//输出16进制表示
  3. 空格、回车的输出条件

代码

#include"stdafx.h"
#include<iostream>
#include <stdio.h>
using namespace std;
int atr[26];//26个字母对应的10进制数字
char charr[16];//存储16个字母
FILE *fin;
int main()
{
//26个字母的对应的10进制数字,97开始
for (int i = 0; i < 26; i++) {
atr[i] = 97 + i;
}
fin = fopen("in.txt", "r");
int i = 1;//记录偏移的次数
char ch;
int nums = 0;//记录读入的字母个数
while (fscanf(fin,"%c", &ch)!= EOF)
{
charr[nums % 16] = ch;
if (nums % 16 == 0) {//每格16个字母输出一次偏移量
cout.fill('0');//前面补0
cout.width(8);//补齐之后宽度为8
cout << hex<< 16 * i ;//hex为输出16进制表示
printf(" ");//偏移量
i++;
}
//输出字母对应的十六进制数字表示
cout << hex <<atr[ch - 'a'] << " ";
if ((nums+1) % 8 == 0) {
cout << " ";//每隔8个多输出一个空格
}
//输出16个字母构成的字母串
if ((nums + 1) % 16 == 0) {
for (int j = 0; j < 16; j++) {
cout << charr[j];
}
cout <<endl;//输出回车
}
nums++;
}
system("pause");
return 0;
}