static char N[100000 + 1 + 1];
static int x, y, len;
static char ans[100000 + 1 + 1];
static void only_one(void)
{
int v = N[0] - '0';
if (v >= y)
ans[0] = y + '0';
else if (v >= x) //x <= v < y
ans[0] = x + '0';
else // v < x
strcpy(ans, "-1");
if (ans[0] == '0')
strcpy(ans, "-1");
}
static void several(void)
{
int diff = 0, i;
for (i = 0; i < len; i++)
{
int v = N[i] - '0';
if (diff)
break;
else
{
if (v >= y)
ans[i] = y + '0';
else if (v >= x)
ans[i] = x + '0';
else
{
for (i -= 1; i >= 0; i--)
{
if (ans[i] == y + '0')
{
ans[i] = x + '0';
break;
}
}
if (i < 0)
ans[++i] = '0';
}
}
diff = N[i] - ans[i];
}
if (i < len)
memset(ans + i, y + '0', sizeof(char) * (len - i));
}
static void solution(void)
{
scanf("%s %d %d\n", N, &x, &y);
len = strlen(N);
if (len == 1)
only_one();
else
several();
if (ans[0] == '0')
printf("%s\n", ans + 1);
else
printf("%s\n", ans);
memset(ans, 0, sizeof(ans));
}
샘플 테스트 케이스 외에 아래의 케이스도 따져봐야 한다.
4242133 2 4
20009 2 3
그리고 문제의 조건 중에 양의 정수를 선물 하고자 한다 하였는데, 이 부분을 제대로 읽지 못해 여러 번 실패 했다.
문제를 잘 읽어 봐야 겠다.