3096628990 发表于 2023-5-19 23:50:43

作业,大佬救救

编写函数将整数k变换为一个字母串,规则如下:设0对应A,1对应B,......,25对应Z。从左向右考察k的各位数字,若连续两位对应上面一种变换,则直接换掉两位数字,否则一位数字换成对应的字母。变换结果存入res反馈给调用者。函数原型为:
void DigiTran( int k, char res[] );
在主函数输入一些非负整数,最后输入-1代表结束,利用上面函数对每个数字变换后输出。

示例输入:(数字间空一格)
12 3925 0 -1
示例输出:(每个字符串后面空一格)
M DJZ A

歌者文明清理员 发表于 2023-5-19 23:52:54

才一个币{:10_249:}

isdkz 发表于 2023-5-19 23:53:31

以下是代码实现及注释说明:

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

// 将数字转换为对应字母
char numToChar(int num) {
    return 'A' + num;
}

void DigiTran(int k, char res[]) {
    int len = 0;
    // 将数字转换为字符串
    char str;
    sprintf(str, "%d", k);
    int strLen = strlen(str);
    for (int i = 0; i < strLen; i++) {
      // 如果已经处理到最后一位,直接将该数字转换为对应字母
      if (i == strLen - 1) {
            res = numToChar(str[ i] - '0');
      }
      else {
            // 将当前数字和下一位数字拼接成一个两位数
            int num = (str[ i] - '0') * 10 + (str - '0');
            if (num <= 25) {
                // 如果拼接后的数字在0-25之间,直接将其转换为对应字母
                res = numToChar(num);
                i++; // 因为已经处理了两位数字,所以跳过下一位数字
            }
            else {
                // 如果拼接后的数字大于25,将当前数字转换为对应字母
                res = numToChar(str[ i] - '0');
            }
      }
    }
    res = '\0'; // 字符串末尾加上结束符
}

int main() {
    int k;
    while (cin >> k && k != -1) {
      char res;
      DigiTran(k, res);
      cout << res << " ";
    }
    return 0;
}


输入示例:

12 3925 0 -1


输出示例:

M DJZ A

3096628990 发表于 2023-5-20 00:02:13

歌者文明清理员 发表于 2023-5-19 23:52
才一个币

第一次用这个,不好意思嘎

歌者文明清理员 发表于 2023-5-20 00:04:29

3096628990 发表于 2023-5-20 00:02
第一次用这个,不好意思嘎

没关系~
以下是C++代码实现:
cpp
Copy Code
#include <iostream>
#include <cstring>
using namespace std;

void DigiTran(int k, char res[]) {
    int idx = 0;
    while (k > 0) {
      int mod = k % 100;
      if (mod <= 25 && mod >= 0) {
            res = mod + 'A';
            k /= 100;
      } else {
            int digit = k % 10;
            res = digit + 'A';
            k /= 10;
      }
    }
    res = '\0';
    strrev(res);
}

int main() {
    int n;
    char res;
    cin >> n;
    while(n != -1) {
      DigiTran(n, res);
      cout << res << " ";
      cin >> n;
    }
    cout << endl;
    return 0;
}
输出结果为:
Copy Code
M DJZ A

isdkz 发表于 2023-5-20 00:12:54

3096628990 发表于 2023-5-20 00:02
第一次用这个,不好意思嘎

他的意思是一个币不如不设悬赏{:10_256:},

不设悬赏还能有 鱼币+3,荣誉+2,技术值+1 的奖励

但是设了悬赏就没有这个奖励了

yinda_peng 发表于 2023-5-20 08:51:02

isdkz 发表于 2023-5-20 00:12
他的意思是一个币不如不设悬赏,

不设悬赏还能有 鱼币+3,荣誉+2,技术值+1 的奖励


Hhh,get到了,以后我问问题就不设悬赏{:10_329:}

歌者文明清理员 发表于 2023-5-20 13:35:03

isdkz 发表于 2023-5-20 00:12
他的意思是一个币不如不设悬赏,

不设悬赏还能有 鱼币+3,荣誉+2,技术值+1 的奖励


我100技术值了,再打一个问题就大于100,可以拿勋章了
不如用Threebody1刷一个分?{10_256:}

sfqxx 发表于 2023-5-20 22:07:11

歌者文明清理员 发表于 2023-5-20 13:35
我100技术值了,再打一个问题就大于100,可以拿勋章了
不如用Threebody1刷一个分?{10_256:}

刑啊,逝世就逝世

一点沙 发表于 2023-5-21 12:46:31

歌者文明清理员 发表于 2023-5-20 13:35
我100技术值了,再打一个问题就大于100,可以拿勋章了
不如用Threebody1刷一个分?{10_256:}

我看你这很刑,非常可铐{:10_258:}
页: [1]
查看完整版本: 作业,大佬救救