// Delete number
// 删除一个数(num)中K位后, 找出最小值
#include <stdio.h>
#define N 10
// INT 最大只有10位
int main()
{
int DeleteNumber(int n, int k);
int num = 0;
int k = 0;
printf("Input a number and k:");
scanf("%d %d", &num, &k);
num = DeleteNumber(num, k);
printf("The number is : %d\n", num);
return 0;
}
int DeleteNumber(int num, int k)
{
int GetEveryDigit(int a[N], int num);
// 把数num中的各个位放入数组中, 返回数组长度
int GetMinPosition(int a[N], int len, int pos);// 从a[pos]到a[len]中寻找最小数, 返回下标
int a[N];
int pos;
// 存放GetMinPosition返回值
int result = 0;
// 存放结果
int len = 0;
// 数组长度
if (num <= 0 || k < 0)
{
return -1;
}
else
{
len = GetEveryDigit(a, num);
pos = len;
if (len <= k)
// 当要删除位数大于数组长度时, 返回0
{
return 0;
}
if (k == 0)
// 不删除任何位
{
return num;
}
k = len - k;
// k表示要选多少位出来,总的个数减去要删除的个数
while (k > 0)
//
{
result *= 10;
// 选数是从高位到低位, 所以每增加一个位, 数要*10
pos = GetMinPosition(a, pos, k);
//
result += a[pos];
// 增加一位
k -- ;
}
return result;
}
}
int GetEveryDigit(int a[N], int num)
{
// 把数num中的各个位放入数组中, 返回数组长度
int n = 0;
while (num != 0)
{
a[n++] = num % 10;
num /= 10;
}
return n;
}// end
int GetMinPosition(int a[N], int len, int pos)
{
// 从a[pos]到a[len]中寻找最小数, 返回下标
int i;
int result = len-1;
for (i=len-1; i>=pos-1; i--)
{
if (a[result] > a[i])
{
result = i;
}
}
return result;
}// end