红题80pts求助
查看原帖
红题80pts求助
320697
AMIRIOX無暝楼主2020/12/21 12:47

太丢人了

#include <iostream>
#include <map>
#include <cctype>
#include <cmath>
#include <vector>
using namespace std;
const int maxn = 1e5+10;
char mapping[]={
  '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
map<char,int> mapping2 = {
  {'A', 10},
  {'B', 11},
  {'C', 12},
  {'D', 13},
  {'E', 14},
  {'F', 15}
};
// int transTo10b(int x) {
//   // calc the bit of the number
//   int backup=x;
//   int bit = 0;
//   while(backup) {
//     bit++;
//     backup/=10;
//   }
//   if(x==0) bit=1;
//
//   // transform to 16-base number
//   int res = 0;
//   for(int i=0; i<bit; i++) {
//     // 0 1
//     int curbit = x%10;
//     int por = curbit*pow(16, i);
//     res+=por;
//     x/=10;
//   }
//   return res;
// }

int ctoi(char x) {
  if(isdigit(x)) {
    return x-'0';
  }else {
    return mapping2[x];
  }
}
char itoc(int x) {
  return mapping[x];
}

int transTo10b(string v) {
  int bit = v.length();
  int result = 0, zs=0;
  for(int i=v.length()-1;i>=0;i--) {
    result+=ctoi(v[i])*pow(16,zs);
    zs++;
  }
  return result;
}

string transTo16b(int v) {
  if(v==0) {
    return string("00");
  }else {
    vector<int> result;
    string ret;
    while(v){
      result.push_back(v%16);
      v/=16;
    }
    for(int i=result.size()-1;i>=0;i--) {
      ret+=itoc(result[i]);
    }
    return ret;
  }
}

int main() {
  char x;
  cin >> x;
  cout << "#";
  for(int i=1;i<=3;i++) {
    // 字符串拼接 a b
    // 转为10进制
    // 255-去这个数
    // 转为16进制 输出
    char a,b;
    cin >> a >> b;
    string tmp(1,a);
    tmp.push_back(b);
    int i10 = transTo10b(tmp);
    i10=255-i10;
    // cout << i10 << endl;
    cout << transTo16b(i10);
  }
  return 0;
}

2020/12/21 12:47
加载中...