用c语言编写代码;给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
时间: 2024-03-14 11:43:20 浏览: 70
好的,以下是用 C 语言编写的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *removeKdigits(char *num, int k) {
int n = strlen(num);
if (n <= k) {
char *res = (char *)malloc(sizeof(char) * 2);
res[0] = '0';
res[1] = '\0';
return res;
}
char *stack = (char *)malloc(sizeof(char) * (n + 1));
int top = 0;
for (int i = 0; i < n; i++) {
while (top > 0 && stack[top - 1] > num[i] && k > 0) {
top--;
k--;
}
stack[top++] = num[i];
}
while (k > 0) {
top--;
k--;
}
int i = 0;
while (i < top && stack[i] == '0') {
i++;
}
if (i == top) {
char *res = (char *)malloc(sizeof(char) * 2);
res[0] = '0';
res[1] = '\0';
return res;
} else {
char *res = (char *)malloc(sizeof(char) * (top - i + 1));
for (int j = i; j < top; j++) {
res[j - i] = stack[j];
}
res[top - i] = '\0';
free(stack);
return res;
}
}
int main() {
char num[100];
int k;
printf("请输入一个非负整数 num:");
scanf("%s", num);
printf("请输入要移除的数字个数 k:");
scanf("%d", &k);
char *res = removeKdigits(num, k);
printf("移除 %d 个数字后得到的最小数为:%s\n", k, res);
free(res);
return 0;
}
```
这个程序的大致思路是利用栈来维护一个递增的序列,每次遇到一个新的数字时,如果它比栈顶元素小,就将栈顶元素出栈,直到栈为空、栈顶元素比新数字小或者已经移除了 k 个数字为止。最后将栈中剩余的数字组成答案即可。
需要注意的是,当移除了 k 个数字后,如果栈中还没有数字,说明原数的所有数字都被移除了,此时应该返回字符串 "0"。此外,还需要注意字符串可能以多个 "0" 开头的情况。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)