编写C语言程序输入一个正整数。将各位上为偶数的数取出。并按原来从高位到低位相反的顺序组成一个新的数输出。
时间: 2024-06-13 18:05:59 浏览: 194
以下是C语言程序,实现输入一个正整数,将各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数输出:
```c
#include <stdio.h>
int Fun(int n) {
int res = 0, base = 1;
while (n > 0) {
int digit = n % 10;
if (digit % 2 == 0) {
res += digit * base;
base *= 10;
}
n /= 10;
}
return res;
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
int res = Fun(n);
printf("各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成的新数为:%d\n", res);
return 0;
}
```
相关问题
C语言编写程序,输入一个正整数,将各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数输出。
在C语言中,你可以使用循环结构和位操作来实现这个功能。下面是一个简单的示例程序:
```c
#include <stdio.h>
// 函数用于计算并返回原数各位上偶数翻转后的值
int reverseEven(int num) {
int mask = 0x55555555; // 二进制10101010...,每一位对应num的一位,如果num该位是偶数,则mask相应位置为1
int result = 0;
while (num != 0) {
if ((num & mask) != 0) { // 检查当前位是否为偶数
result |= (mask << (31 - __builtin_clz(num))); // 如果是偶数,左移相应的位并按位或操作添加到结果
}
num >>= 1; // 将num右移一位
}
return result;
}
int main() {
int input;
printf("请输入一个正整数:");
scanf("%d", &input);
// 确保输入的是正整数
if (input <= 0) {
printf("错误:输入必须是正整数。\n");
return 1;
}
int reversed = reverseEven(input);
printf("各位上为偶数的数按逆序组成的新的数是:%d\n", reversed);
return 0;
}
```
在这个程序中,`reverseEven`函数通过位操作逐位检查输入的数,如果某个位是偶数(即为1),就将其左移至结果中适当的位置。最后,`main`函数接收用户输入,调用`reverseEven`函数处理并输出结果。
一个整数如果按从低位到高位的顺序,奇数位上是奇数,偶位数上的数字是偶数,我们称之为好数。给定一个正整数N,计算从一到N一共有多少个好数 c语言
要计算从1到N的所有好数的数量,我们可以采用分治策略。首先,我们需要确定每个数是否是好数,然后统计这个范围内的好数。
对于每个数n,我们可以将其每一位分别检查。如果它是奇数,那么奇数位必须是奇数;如果是偶数位,它必须是偶数。这可以通过对n进行按位与运算与对应的奇偶数位值(1和0)进行比较来判断。
下面是用C语言编写的一个简单函数,用于检查一个数是否是好数:
```c
int isGoodNumber(int n) {
int oddBits = n & 0xAAAAAAAA; // 取奇数位
int evenBits = n & 0xAAAAAAAB; // 取偶数位
return !(oddBits % 2 || evenBits % 2); // 如果奇数位都是奇数,偶数位都是偶数则返回true
}
```
接下来,你可以遍历从1到N,统计并累加那些是好数的计数器。这里有一个完整的示例代码片段:
```c
#include <stdio.h>
int isGoodNumber(int n);
int countGoodNumbers(int start, int end);
int main() {
int N;
printf("请输入一个正整数N: ");
scanf("%d", &N);
int goodNumbersCount = countGoodNumbers(1, N);
printf("从1到%d有%d个好数。\n", N, goodNumbersCount);
return 0;
}
int countGoodNumbers(int start, int end) {
if (start > end)
return 0;
if (isGoodNumber(start))
return 1 + countGoodNumbers(start + 1, end);
else
return countGoodNumbers(start + 1, end);
}
// 以上面定义的isGoodNumber函数
```
阅读全文