xmu预推免机试

1.给定一个字符串 "a34b102",从中提取八进制数字 "34102"。将这个八进制数字转换为二进制,并计算其二进制表示中1的个数。

C语言解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


// 函数:将八进制数转换为二进制并计算其中1的个数
int countOnesInOctalToBinary(char *octalString) {
long octalNum = strtol(octalString, NULL, 8); // 将八进制字符串转换为长整型数值
int count = 0;

// 计算二进制中1的个数
while (octalNum > 0) {
count += octalNum & 1;
octalNum >>= 1;
}

return count;
}

int main() {
char input[] = "a34b102";
char octalString[20]; // 存储提取的八进制数字字符串
int octalIndex = 0;

// 提取字符串中的八进制数字部分
for (int i = 0; i < strlen(input); i++) {
if (input[i] >= '0' && input[i] <= '7') {
octalString[octalIndex++] = input[i];
}
}
octalString[octalIndex] = '\0'; // 添加字符串结束符

printf("提取的八进制数字为:%s\n", octalString);

// 计算八进制转换为二进制中1的个数
int onesCount = countOnesInOctalToBinary(octalString);
printf("八进制转换为二进制后1的个数为:%d\n", onesCount);

return 0;
}

解决方案详解

问题描述

  • 输入:字符串 "a34b102"
  • 输出
    1. 从输入字符串中提取八进制数字 "34102"
    2. 将该八进制数字转换为二进制,并计算其二进制表示中1的个数。

C语言代码详解

  1. countOnesInOctalToBinary 函数:将八进制字符串转换为长整型数值,并使用位操作计算其中1的个数。
  2. main 函数
    • 初始化输入字符串 "a34b102"
    • 从输入字符串中提取八进制数字部分,并存储在 octalString 中。
    • 调用 countOnesInOctalToBinary 函数,计算八进制数字转换为二进制后1的个数。
    • 输出提取的八进制数字和计算得到的二进制中1的个数。

运行代码

  • 编译并运行这段C程序。
  • 输出结果应为:
    1
    2
    提取的八进制数字为:34102
    八进制转换为二进制后1的个数为:5
  • 这表明程序正确地从输入字符串中提取了八进制数字,并计算了所需的二进制中1的个数。
    ```
作者

Xiongyuqi

发布于

2024-06-29

更新于

2024-06-29

许可协议

评论