将一个长整型数s的每一位数位上的偶数依次取出来,构成一个新的数t,其高位仍在高位,低位仍在低位。用C语言完成此题目
时间: 2024-10-15 10:26:36 浏览: 9
在C语言中,你可以使用循环结构和位运算来实现这个功能。这里是一个详细的步骤描述和代码示例:
首先,创建一个函数,接受一个长整型`s`作为输入:
```c
#include <stdio.h>
#include <stdlib.h> // 引入获取内存大小的头文件
// 函数用于提取并返回新数t
long long extract_even_digits(long long s) {
long long t = 0; // 初始化结果为0
bool is_negative = (s < 0); // 判断原数是否为负数
s = abs(s); // 转换为非负数以便操作
while (s != 0) {
// 通过右移一位获取最低有效位,并检查它是偶数还是奇数
int digit = (s & 1) ? 0 : s % 10;
// 如果是偶数,将其添加到结果t的低16位,因为`long long`通常有64位
// 如果`t`的高16位已经满,则将`t`左移16位再加
if (digit > 0 && ((t >> 16) == 0)) {
t |= digit << 16;
} else {
t <<= 1; // 如果高16位已满,先左移一位
t |= digit; // 然后再添加新的偶数位
}
s >>= 1; // 右移一位去除最低有效位
}
// 如果原数是负数,反转结果t的符号
if (is_negative)
t = -t;
return t;
}
int main() {
long long s = 87653142;
long long t = extract_even_digits(s);
printf("偶数位组成的数t: %lld\n", t);
return 0;
}
```
这个程序会打印出 `8642`,这是输入数字 `87653142` 中偶数位组成的新数。
阅读全文