算法设计9-最小正整数问题
参考例题19,P151页
问题描述
代码
#pragma warning(disable : 4996)
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
void del(char n[], int b)
{
int i;
for (i = b; i < strlen(n); i++)
n[i] = n[i + 1];//删掉最大数后,后面的数接上
}
int main()
{
char n[100], m[100];
int s, i, j, data[200], len;
int l1;
int num = 0;
cout << "请输入高精度正整数n:";
cin >> n;
strcpy(m, n);
cout << "请输入s:";
cin >> s;
len = strlen(n);
l1 = len;
if (s > len)//要删除的位数大于总位数——报错
{
cout << "data error!" << endl; return 0;
}
for (i = 0, j = 0; i < len && num < s; i++, j++)
{
if ((i == 0 && n[i] > n[i + 1]) || (n[i] > n[i + 1] && n[i] > n[i - 1]))
{
for (int t = 0; t < len; t++)
{
if (n[i] == m[t])
{
data[num] = t + 1; break;
}
}
del(n, i);
num++;
i = i - 2;
l1--;
}
}
//删除前面的0
while(n[0]=='0'&&l1>1)
{
del(n,0); l1--;
}
cout << n << endl;
for (i = 0; i < s; i++)
cout << data[i] << " ";
return 0;
}
运行结果截图