python给定一个十进制正整数n,每个数位上的数字均不为0。n的位数为m,现在从m位中删除k位(0<k<m),求生成的新数最小为多少
时间: 2023-05-26 19:06:23 浏览: 54
可以采用贪心的思想,从高位到低位依次保留最小的数字。具体做法如下:
1. 将n转化为字符串,方便后续操作。
2. 对于每一位,从高位到低位遍历,如果当前位数字比后面的数字大,则删除当前位数字,同时将k减去1。
3. 如果k减为0了,则直接将剩下的数字拼接起来就是答案;如果遍历完了所有的位数,k还是大于0,则需要继续删除数字,这时从低位到高位依次删去k个数字,然后将剩下的数字拼接起来就是答案。
下面是Python代码实现:
def deleteDigits(n, k):
n = str(n)
m = len(n)
while k > 0:
i = 0
while i < len(n) - 1 and n[i] <= n[i+1]:
i += 1
n = n[:i] + n[i+1:]
k -= 1
i = 0
while i < len(n) - 1 and n[i] == '0':
i += 1
n = n[i:]
if len(n) == 0:
return 0
return int(n)
print(deleteDigits(1432219, 3)) # 输出为1219
相关问题
python给定一个十进制的正整数n(0≤n≤100,000,000),转换为对应的二进制数据。
可以使用Python内置的bin()函数将十进制整数转换为二进制字符串。代码如下:
```python
n = int(input("请输入一个十进制整数:"))
binary = bin(n)[2:] # 转换为二进制字符串
print("对应的二进制数为:", binary)
```
其中,bin(n)函数返回一个以"0b"开头的二进制字符串,因此需要使用字符串切片[2:]去掉开头的"0b"。
python 输入一个正整数n,要求输出其位数,并分别以正序和逆序输出各位数字。
输入一个正整数n,首先要求输出其位数。可以通过将整数转换为字符串,然后获取字符串的长度来得到位数。比如,当输入1234时,其位数为4。
接下来要求以正序和逆序分别输出各位数字。可以通过将整数转换为字符串,然后遍历字符串中的每个字符来实现。以正序输出各位数字时,可以直接遍历字符串并打印每个字符;以逆序输出各位数字时,可以先将字符串反转,然后再遍历并打印每个字符。
以输入1234为例,其位数为4,正序输出为1 2 3 4,逆序输出为4 3 2 1。
整合起来,可以使用以下Python代码实现:
```python
def number_info(n):
# 获取位数
digits = len(str(n))
print("位数为:", digits)
# 正序输出各位数字
print("正序输出各位数字:")
for digit in str(n):
print(digit, end=" ")
# 逆序输出各位数字
print("\n逆序输出各位数字:")
reverse_n = str(n)[::-1]
for digit in reverse_n:
print(digit, end=" ")
# 测试
number_info(1234)
```
运行以上代码,输入1234将得到如下输出:
```
位数为: 4
正序输出各位数字:
1 2 3 4
逆序输出各位数字:
4 3 2 1
```