给定程序中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。#include <stdio.h> /********found********/ void fun(long s,long t) { long s1=10; *t=s%10; while(s>0) { s=s/100; *t=s%10*s1+*t; /********found********/ s1=s1*100; } } void main() { long s,t; scanf("%ld",&s); fun(s,&t); printf("%ld\n",t); }
时间: 2023-07-23 11:30:34 浏览: 135
这是一道较典型的“取位数”问题,根据题意可以得到函数fun的实现如下:
```c
#include <stdio.h>
void fun(long s,long *t) {
long s1=10;
*t=s%10;
while(s>0) {
s=s/100;
*t=s%10*s1+*t;
s1=s1*100;
}
}
void main() {
long s,t;
scanf("%ld",&s);
fun(s,&t);
printf("%ld\n",t);
}
```
注意,在函数fun中,我们传入了参数`t`的地址,这样就可以将构造出的新数返回给主函数了。另外,由于题目中要求从低位开始取出奇数位上的数,所以我们在while循环中每次将`s`除以100,这样就可以跳过偶数位的数了。具体地,我们每次取出`s`的个位数(即奇数位上的数),将其加入到`t`中,然后将`s`除以100,这样就可以跳过当前的个位数和下一个偶数位的数。最后,我们需要将`t`中的数倒置过来,这可以通过在while循环中使用`*t=s%10*s1+*t`来实现。
相关问题
功能:从低位开始取出长整型变量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`)中。
阅读全文