不小于原数的最小不重复数

	如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。例如,105、1234和12121都是“不重复数”,而11、100和1225不是。给定一个正整数A,返回大于A的最小“不重复数”。A小于100000
	这个题目是华为编程中的。只是 这里不是大于,而是不小于。处理方式是一样的。
	
	个人觉得把它转换成字符串会很方便,分重复的数为9时,和不为9这种情况,若为9,则原数的长度可能发生改变。所以转换成字符串时先留一个字符的位置用于处理该情况。	
	处理’9’的情况,如99,则把这两个字符变为“00”,并在最使其前面的字符加1,并回到开头处理。
	而不重复的‘9‘时,只要把第二个字符加1即可。然后处理下一个字符。
 
	
/* Note:Your choice is C IDE */
#include "stdio.h"
#include<string.h>
int  to_min_norep(int num)
{
	char buf[12];
	int i=0,j;
	char *p=NULL;
	int len;
	buf[0]='0';
	sprintf(buf+1,"%d",num);
	p=buf+1;	
	len=strlen(buf)-1;
	/*若为99的处理*/
	while((i+1)<len)
	{
		if(*(p+i)==*(p+i+1)&&*(p+i)=='9')
		{
			*(p+i-1)+=1;
			*(p+i)='0';
			*(p+i+1)='0';	
			i=0;			
		}
		else if(*(p+i)==*(p+i+1)&&*(p+i)!='9')
		{
			
			*(p+i+1)+=1;
			i++;
		}
		else
			i++;
		
	}
	return atoi(buf);		
}

void main()
{
	int num=989899;//1101010101;//21100;//1101010101
	int num1;
	char buf[10];	
	num1=to_min_norep(num);
	printf("num1=%d\n",num1);    
}
num1=1010101



             Press any key to continue

转载请标明出处:http://blog.csdn.net/lin200753/article/details/28721175
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值