[Solution]《进制转换》解题报告

题目很简单:把一个十进制数转换成十六进制。

亮点:使用常量字符数组来存储0 – 15的对应值0 – F

不多说,直接上代码。


#include <iostream>
#include <string>
using namespace std;

// 定义进制数
const int radix = 16;

// 定义 0-F 对应 0 - 15
const char digit[radix] = "0123456789ABCDEF";

// 定义无符号64位长整型变量 n
unsigned long long n;

// 定义字符串变量 ans,用于存储结果
string ans;

// 主过程
void f(unsigned long long x){
    
    // 将字符串 ans 后连接 x mod radix 的对应 0-F 字符
    ans += digit[x % radix];
    
    // 将 x 赋值为 x / radix (进制数(16))
    x /= radix;
    
    // 如果 x 已被除尽,则退出过程
    if (x == 0) 
        return;
    else
        // 递归调用本过程
        f(x);
}


int main(){
    // 读入n
    cin >> n;
    
    // 执行过程
    f(n);
    
    // 倒序输出字符串
    for (int i = ans.length() - 1; i >= 0; i-- )
        cout << ans[i];
    
    return 0;
}

[Solution]《键盘》解题报告

http://www.tyvj.cn/Open_Problem_Show.aspx?id=1007
其实这道题根本不需要像题目中提示说的那样复杂,不需要switch / case语句。

上代码:

#include <iostream>
#include <stdio.h>

using namespace std;

int x,y;
const int mx = 4, my = 11;
char c[mx][my]={
  {'1','2','3','4','5','6','7','8','9','0','-'},
  {'Q','W','E','R','T','Y','U','I','O','P'},
  {'A','S','D','F','G','H','J','K','L'},
  {'Z','X','C','V','B','N','M',','}
};

void getLoacltion(char n){
  for (int i = 0; i < mx; i++){
    for (int k = 0; k < my; k++){
      if (c[i][k] == n){
        x = i;y = k;
        return;
      }
    }
  }
}

int main(){
  char n;
  n = getchar();
  getLoacltion(n);
  cout << c[x-1][y] << " " << c[x-1][y+1];

  return 0;
}

就这么简单!