给定一个整数,对这个整数的一次转换是指这个整数的所有位数上非零数字乘积
时间: 2024-06-13 16:09:03 浏览: 135
输入两个正整数m和n求其最大公约数和最小公倍数.docx
5星 · 资源好评率100%
给定一个整数,对这个整数的一次转换是指这个整数的所有位数上非零数字乘积。例如,123的一次转换为1*2*3=6。现在给定两个整数n和k,请你求出在区间[1, n]中,每个数的一次转换的结果中包含k个数字1的数的个数。
以下是Python的实现方法:
```python
def countDigitOne(n):
if n <= 0:
return 0
if n < 10:
return 1
s = str(n)
high = int(s[0])
power = 10 ** (len(s) - 1)
last = n - high * power
if high == 1:
return countDigitOne(power - 1) + last + 1 + countDigitOne(last)
else:
return power + high * countDigitOne(power - 1) + countDigitOne(last)
def countNumbersWithUniqueDigits(n, k):
if k == 0:
return 1
if n == 0:
return 0
res = 0
for i in range(1, n + 1):
if '1' in str(i):
continue
if countDigitOne(i) == k:
res += 1
return res
```
阅读全文