用c语言写一个不含7的数位dp
时间: 2024-10-23 21:14:14 浏览: 17
在C语言中,我们可以编写一个函数来检查一个整数是否不含数字7的数位动态规划版本。这个问题可以用递归的方式来实现,因为我们只需要关心当前位的数字和剩下的位,而不受前面位的影响。
以下是一个简单的示例:
```c
#include <stdbool.h>
bool isSevenFree(int n) {
// 基线条件:当数字小于10时,直接判断
if (n <= 9) {
return n != 7;
}
// 分治策略:取最后一个数字并与剩余部分相乘
int last_digit = n % 10; // 当前位
int rest = n / 10; // 去掉最后一位后的数
// 使用递归检查去掉最后一位后的情况
return (last_digit != 7 && isSevenFree(rest));
}
int main() {
int num = 12345689;
if (isSevenFree(num)) {
printf("%d 是不含7的数\n", num);
} else {
printf("%d 含有7\n", num);
}
return 0;
}
```
这个函数`isSevenFree`会持续检查除以10后的余数,直到达到基础情况,如果在整个过程中都没有遇到7,那么返回`true`,反之则返回`false`。
相关问题
用C语言编写:输入一个不含零的整数,输出这个数是几位数,并输出该数的逆序数。
这是一个技术问题,可以回答。这个问题可以通过以下代码来实现:
#include <stdio.h>
int main() {
int n, count = 0, rev = 0;
printf("请输入一个不含零的整数:\n");
scanf("%d", &n);
while (n != 0) {
int digit = n % 10;
if (digit == 0) {
printf("输入的数含有零,请重新输入!\n");
return 0;
}
count++;
rev = rev * 10 + digit;
n /= 10;
}
printf("这个数是 %d 位数,它的逆序数是 %d\n", count, rev);
return 0;
}
使用C语言写递归编写一个程序,逆序输出一个非负整数。例如输入1234,输出4321(不含前导0)。
可以的,以下是C语言递归程序的代码:
```
#include <stdio.h>
void reverse(int n) {
if (n == 0) {
return;
}
printf("%d", n % 10);
reverse(n / 10);
}
int main() {
int n;
printf("请输入一个非负整数:");
scanf("%d", &n);
reverse(n);
printf("\n");
return 0;
}
```
这个程序会递归地将输入的非负整数的每一位数倒序输出。
阅读全文