子数整数
题目描述
对于一个五位数 $\overline{a_1a_2a_3a_4a_5}$,可将其拆分为三个子数:
$sub_1=\overline{a_1a_2a_3}$
$sub_2=\overline{a_2a_3a_4}$
$sub_3=\overline{a_3a_4a_5}$
例如,五位数 $20207$ 可以拆分成
$sub_1=202$
$sub_2=020\ (=20)$
$sub_3=207$
现在给定一个正整数 $K$,要求你编程求出 $10000$ 到 $30000$ 之间所有满足下述条件的五位数,条件是这些五位数的三个子数 $sub_1,sub_2,sub_3$ 都可被 $K$ 整除。
输入格式
一个正整数 $K$。
输出格式
每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出 No
。
样例 #1
样例输入 #1
1 | 15 |
样例输出 #1
1 | 22555 |
提示
$0<K<1000$
题解
1 | k = int(input()) |
代码其实还可以优化,把 qbsg 的计算方法改一下
1 | q = (i % 10000) // 1000 |
题解解释
来自 ChatGPT
这段代码的作用是寻找在范围 [10000, 30000]
内的所有满足特定条件的五位数。根据题目描述,这些五位数可以被拆分为三个子数 sub1
, sub2
, sub3
,而且这三个子数都能被输入的整数 K
整除。
代码首先通过 input()
函数获取用户输入的整数 K
。然后通过一个循环遍历范围 [10000, 30000]
内的所有五位数。
在循环中,通过整数除法 //
和取余 %
运算符计算了每个五位数的各位数字。这些数字被用于构造三个子数 sub1
, sub2
, sub3
。
接下来,检查每个五位数的三个子数是否都能被 K
整除。如果满足条件,则打印该五位数,并将计数器 count
设为 1
,以表示至少有一个五位数满足条件。
循环结束后,检查 count
的值。如果 count
仍然为 0
,则说明没有找到满足条件的五位数,输出 “No”。
知识点
这题不难,就是取余取整
注意 input 要转成 int 型