最大递增数

输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 2895345323,递增数有:289,345,23, 那么最大的递增数为345。运行时间限制:无限制内存限制:无限制输入:输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况输出:输出最大递增数样例输入:123526897215样例输出:2689


// MaxIncreseNum.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;

char* MaxIncreaseNum(char*numstr);

int _tmain(int argc, _TCHAR* argv[])
{
	//char* in = "48917467";
	//char* in = "12345678";
	char* in = "244891746789";

	cout << "原字符串是:";
	for (int i = 0; i < strlen(in); i++)
		cout << in[i];
	cout << endl;
	cout << "字符串长度为"<<strlen(in) << endl;
	char*out = MaxIncreaseNum(in);
	cout << "最大递增数是:";
	for (int i = 0; i < strlen(in); i++)
		cout << out[i];
	cout << endl;



	//下面测试atoi函数,只是验证,与题目无关
	int k;
	k = atoi("123    ");//测试带空格的字符串的输出,结果输出为123
	cout << k <<0;
	system("pause");
	return 0;
}


char* MaxIncreaseNum(char*numstr)
{
	int j = 0;
	char*findNum = new char[strlen(numstr)];//store the find num
	char*MaxNum = new char[strlen(numstr)];//store the max num
	for (int i = 0; i < strlen(numstr); i++)
	{
		findNum[i] = ' ';
		MaxNum[i] = ' ';
	}
	MaxNum[0] = numstr[0];
	int digitofnum = 1;
	while (j < strlen(numstr)-1)
	{
		int k = 0;
		findNum[0] = numstr[j];
		while (numstr[j] < numstr[j + 1])
		{
			k = k + 1;
			j = j + 1;
			findNum[k] = numstr[j];
		}
		if (k + 1>digitofnum)//如果找到的数的位数大于之前的最大数的位数
		{
			digitofnum = k + 1;
			for (int i = 0; i < strlen(numstr); i++)
			{
				MaxNum[i] = findNum[i];
			}
		}
		if (k + 1 == digitofnum);//如果找到的数的位数等于之前的最大数的位数
		{
			int gg = atoi(MaxNum);
			int kk = atoi(findNum);
			if (kk>gg)
				for (int i = 0; i < strlen(numstr); i++)
				{
					MaxNum[i] = findNum[i];
				}
		}
		j = j + 1;
	}

	return MaxNum;
}





版权声明:

posted on 2015-07-02 09:05  moffis  阅读(228)  评论(0编辑  收藏  举报

导航