首页 > 代码库 > 华为机试—整数逆序并去重

华为机试—整数逆序并去重

输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。

#include <iostream>
#include <string>
using namespace std;

//逆序
char * revs(char *s){
	int j = strlen(s)-1;
    int i=0;
	char t;
	while(i<j){
		t = s[i];
		s[i++]=s[j];
		s[j--]=t;
	}
	return s;
}

void process(const char *pInputStr, long lInputLen, char *pOutputStr)  
{  
    bool flag[10] = {0};   
    int j = 0;
	int flag_0=0;
    for(int i = 0;i < lInputLen;i++)  
    {  
        if(flag[pInputStr[i] - '0'] == 0)//pInputStr[i]第一次出现.  
        {  
			if(pInputStr[i] - '0'==0 && flag_0==0);
			else{
				flag_0=1;
				pOutputStr[j++] = pInputStr[i]; 
				flag[pInputStr[i] - '0'] = 1;  
			}
        }  
    } 

	pOutputStr[j]='\0';

	for(i=0;i<j;i++)
		cout<<pOutputStr[i];

	cout<<endl<<endl;
	
}  

int main()
{
	char *input=new char[100];
	char *output=new char[100];
	char *s=new char[100];
	char *ss;

	int k=0;

	while(cin>>input){
		k=0;
		if(input[0]=='-')
		{
			cout<<"-";
			for(int i=1;i<strlen(input);i++)
				s[k++]=input[i];
			s[k]='\0';
			ss=revs(s);
			process(ss,strlen(ss),output);
		}
		else
		{
			ss=revs(input);
			process(ss,strlen(ss),output);
		}
	}

	delete input;
	delete output;
	delete s;

	return 0;
}

技术分享

华为机试—整数逆序并去重