如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。例如,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