已知函数 Fun21 的部分代码如下所示,其功能是:从低位开始取出长整 型变量 x 中奇数位上的数字,并构成一个数返回。例如,若 x 的值为 1234 567,则返回值为 1357,请在空格处补充程序。程序思路
时间: 2024-05-08 09:19:02 浏览: 127
:首先将 x 转化为字符串类型,从末尾开始遍历字符串,取出奇数位上的字符并拼接,最后将拼接好的字符串转化为数字返回。
```
long long Fun21(long long x)
{
string str = to_string(x);
string res = ""; // 存储奇数位上的字符
for (int i = str.length() - 1; i >= 0; i -= 2)
{
res += str[i];
}
return stoll(res); // 将拼接好的字符串转化为数字返回
}
```
相关问题
功能:从低位开始取出长整型变量s中奇数位上的数,依次构成一 个新数放在t中。如,s=12345,则t=135。 #include <stdio.h> void fun (long s, long *t) long s1=15; *t=s__10; while(s>0){ s=_; *t+=s%10*s1; s1=s1*15;}}
这段代码存在一些错误,我来为你解释一下:
1. 函数定义中缺少了函数体的大括号。
2. 在函数体中,变量 s1 和 s 缺少类型声明。
3. 在 while 循环中,变量 s 的更新操作缺少了除以 10 的操作,导致会一直循环下去。
4. 变量 s1 的初始值错误,应该为 1 而不是 15。
5. 变量 s 的赋值操作缺少了除以 10 的操作。
6. 变量 t 的初始值没有给出。
下面是修改后的代码:
```c
#include <stdio.h>
void fun(long s, long *t) {
long s1 = 1;
*t = 0;
while (s > 0) {
*t += s % 10 * s1;
s /= 100;
s1 *= 10;
}
}
int main() {
long s = 12345;
long t;
fun(s, &t);
printf("%ld\n", t);
return 0;
}
```
运行结果为:
```
135
```
程序填空】---------------------------------------------------------功能:从低位开始取出长整型变量s中奇数位上的数,依次构成一 个新数
在编程中,要实现这个功能,你可以使用位操作来逐个检查和提取长整型变量s中的奇数位。这里是一个使用C++语言的示例:
```cpp
#include <bitset>
long long extractOddBits(long long s) {
std::bitset<64> bitSet(s); // 将长整型转换为64位二进制表示
long long result = 0; // 存储奇数位的结果
for (size_t i = 0; i < 64; ++i) { // 遍历所有位
if (bitSet.test(i) && i % 2 != 0) { // 检查位是否为1且是奇数位
result |= (1LL << i); // 如果是奇数位,将对应的1左移并按位或到结果中
}
}
return result;
}
```
在这个函数中,`std::bitset<64>`用于存储和处理s的二进制表示。`test(i)`方法检查第i位是否为1,`i % 2 != 0`用来判断当前位是否是奇数。`1LL << i`用于创建一个左移后的1,仅当位是奇数时将其添加到结果(`result`)中。
阅读全文