找到含有某数字的数

该文章提供了一个Python程序,通过for循环和取模运算,寻找并输出在100到200之间的所有能被输入的正整数n整除或者其整除后十位数等于n的数。

【问题描述】从键盘输入一个正整数n,求[100,200]之间所有包含n的数,并输出。

【输入形式】输入一个正整数n

【输出形式】输出所有满足条件的数

【样例输入】6
【样例输出】106,116,126,136,146,156,160,161,162,163,164,165,166,167,168,169,176,186,196,

【样例说明】
【评分标准】

n=eval(input())    #输入一个正整数n
for i in range (100,201):
    if i%10==n:
        print(i,end=',')
    elif ((i-i%10)/10)%10==n:
        print(i,end=',')
### 判断一个数字是否包含两个特定数字的解决方案 在 C 语言中,可以通过逐位检查数字的方法来判断一个数字是否包含两个特定数字。以下是一个完整的实现方法: ```c #include <stdio.h> // 定义判断函 int containsTwoDigits(int number, int digit1, int digit2) { int foundDigit1 = 0, foundDigit2 = 0; // 标志变量,用于记录是否找到目标数字 while (number > 0) { // 循环直到数字为0 int currentDigit = number % 10; // 提取当前位 if (currentDigit == digit1) { foundDigit1 = 1; // 找到一个目标数字 } if (currentDigit == digit2) { foundDigit2 = 1; // 找到第二个目标数字 } if (foundDigit1 && foundDigit2) { // 如果两个目标数字找到了 return 1; // 返回1表示找到 } number /= 10; // 去掉最后一位,继续检查 } return 0; // 如果循环结束仍未找到,返回0(假) } int main() { int num, targetDigit1, targetDigit2; printf("请一个: "); scanf("%d", &num); printf("请入要查找的第一个数字: "); scanf("%d", &targetDigit1); printf("请入要查找的第二个数字: "); scanf("%d", &targetDigit2); if (containsTwoDigits(num, targetDigit1, targetDigit2)) { printf("数字 %d 包含数字 %d 和 %d。\n", num, targetDigit1, targetDigit2); } else { printf("数字 %d 不包含数字 %d 和 %d。\n", num, targetDigit1, targetDigit2); } return 0; } ``` 上述代码通过 `containsTwoDigits` 函实现了对数字的逐位检查。具体逻辑如下: - 使用 `number % 10` 提取数字的最后一位[^2]。 - 将提取的位与目标数字进行比较[^2]。 - 如果匹配,则更新对应的标志变量。 - 如果两个目标数字都被找到,则返回 `1` 表示找到;否则,将数字右移一位(`number /= 10`)继续检查下一位[^2]。 这种方法的时间复杂度为 O(log₁₀(n)),其中 n 是数字的大小,因为每次迭代都会减少一位数字[^2]。 --- ### 示例运行 假设用户入如下: - 数字:2023 - 第一个目标数字:2 - 第二个目标数字:3 程序输出: ``` 数字 2023 包含数字 2 和 3。 ``` 如果目标数字改为 5 和 7,则输出: ``` 数字 2023 不包含数字 5 和 7。 ``` --- ### 注意事项 1. **负处理**:如果需要支持负,可以在函开头添加 `number = abs(number)` 来确保数字为正[^2]。 2. **非法入**:目标数字应为 0 至 9 的单个数字,否则结果可能不符合预期[^2]。 --- ### 其他实现方式 除了逐位检查的方法,还可以将数字转换为字符串,使用字符串操作函来判断是否包含特定数字。例如,可以使用 `sprintf` 将数字转换为字符串,然后用 `strchr` 或手动遍历字符串来检查目标数字是否存在[^3]。 ```c #include <stdio.h> #include <string.h> int containsTwoDigitsString(int number, int digit1, int digit2) { char strNumber[20]; sprintf(strNumber, "%d", number); // 将数字转换为字符串 char strDigit1[2], strDigit2[2]; sprintf(strDigit1, "%d", digit1); // 转换目标数字为字符串 sprintf(strDigit2, "%d", digit2); return (strchr(strNumber, strDigit1[0]) != NULL && strchr(strNumber, strDigit2[0]) != NULL); } int main() { int num, targetDigit1, targetDigit2; printf("请一个: "); scanf("%d", &num); printf("请入要查找的第一个数字: "); scanf("%d", &targetDigit1); printf("请入要查找的第二个数字: "); scanf("%d", &targetDigit2); if (containsTwoDigitsString(num, targetDigit1, targetDigit2)) { printf("数字 %d 包含数字 %d 和 %d。\n", num, targetDigit1, targetDigit2); } else { printf("数字 %d 不包含数字 %d 和 %d。\n", num, targetDigit1, targetDigit2); } return 0; } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值