小乐乐从老师口中听到了二段数这个名词,想更深入的了解二段数。
二段数是这样的正整数:恰好包含两种不同的十进制数字s和t,s不是0,并且s的所有出现均排列在所有的t的前面。例如,44444411是二段数(s是4,t是1),41、10000000和5555556也是。但4444114和44444都不是二段数。
这时老师问小乐乐:给你一个任意的正整数n,你能求出比n大并且是n的倍数的最小二段数吗?请你帮助小乐乐解答这个问题。
int func(int n)
{
if (n > 0)//提取每一位数字 把第一位赋值给s 最后一位赋值给t s循环比较后面的数字 若不一样判断是不是等于t 并用t循环比较 若不一样则再次×i继续循环 若一致就输出
{
label:
int s;
for (; n >= 10; n / 10)
{
s = n % 10;//首位数字
}
int t = (n % 10);//末位数字
int q = n;//用q代替n 使循环中一直保留初始值n·
for (; q > 10; q / 10)
{
int k = (q % 10);//循环取出每一位数字
if ((t != k) || (s <= k))//每一位数字与末位判断 每位数字与首位判断
{
if ((k != s) || (s <= k))//当首位与末尾相等或小于末尾 则不满足二段数成立条件
{
int time = 0;//乘数,不相等就成倍叠加再循环
n = n * (time + 2);//改变n的值
time++;
goto label;//跳转到最开始,因为n一变,其余数据都要改变
}
}
}
}
return n;
}