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

输入一个整数,如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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值