CF808A Lucky Year 题解

Content

年份中有不超过 \(1\) 个非 \(0\) 数字的年份是幸运年份。现给出当前年份 \(n\),求到下一个幸运年份还要等多久。

数据范围:\(1\leqslant n\leqslant 10^9\)

Solution

分类讨论,只需要 \(\texttt{if}\) 即可:

  • \(1\leqslant n\leqslant 9\),此时只需要再等一年。
  • \(10\leqslant n\leqslant 99\),那我们就肯定只有 \(n\equiv 0\pmod {10}\) 的年份才是幸运年份。所以,如果 \(10\mid n\),那么还要再等十年,否则还要再等 \((10-n\mod{10})\) 年。
  • \(100\leqslant n\leqslant 999\),那我们就肯定只有 \(n\equiv 0\pmod {100}\) 的年份才是幸运年份。所以,如果 \(100\mid n\),那么还要再等 \(100\) 年,否则还要再等 \((100-n\mod{100})\) 年。
  • \(1000\leqslant n\leqslant 9999\),那我们就肯定只有 \(n\equiv 0\pmod {1000}\) 的年份才是幸运年份。所以,如果 \(1000\mid n\),那么还要再等 \(1000\) 年,否则还要再等 \((1000-n\mod{1000})\) 年。
  • \(10000\leqslant n\leqslant 99999\),那我们就肯定只有 \(n\equiv 0\pmod {10000}\) 的年份才是幸运年份。所以,如果 \(10000\mid n\),那么还要再等 \(10000\) 年,否则还要再等 \((10000-n\mod{10000})\) 年。
  • \(100000\leqslant n\leqslant 999999\),那我们就肯定只有 \(n\equiv 0\pmod {100000}\) 的年份才是幸运年份。所以,如果 \(100000\mid n\),那么还要再等 \(100000\) 年,否则还要再等 \((100000-n\mod{100000})\) 年。
  • \(1000000\leqslant n\leqslant 9999999\),那我们就肯定只有 \(n\equiv 0\pmod {1000000}\) 的年份才是幸运年份。所以,如果 \(1000000\mid n\),那么还要再等 \(1000000\) 年,否则还要再等 \((1000000-n\mod{1000000})\) 年。
  • \(10000000\leqslant n\leqslant 99999999\),那我们就肯定只有 \(n\equiv 0\pmod {10000000}\) 的年份才是幸运年份。所以,如果 \(10000000\mid n\),那么还要再等 \(10000000\) 年,否则还要再等 \((10000000-n\mod{10000000})\) 年。
  • \(100000000\leqslant n\leqslant 999999999\),那我们就肯定只有 \(n\equiv 0\pmod {100000000}\) 的年份才是幸运年份。所以,如果 \(100000000\mid n\),那么还要再等 \(100000000\) 年,否则还要再等 \((100000000-n\mod{100000000})\) 年。
  • \(n=1000000000\),则还需要再等 \(1000000000\) 年。

讨论完毕。

Code

int n;

int main() {
	scanf("%d", &n);
	if(n >= 1 && n <= 9)	printf("1");
	else if(n >= 10 && n <= 99) printf("%d", !(n % 10) ? 10 : 10 - n % 10);
	else if(n >= 100 && n <= 999)	printf("%d", !(n % 100) ? 100: 100 - n % 100);
	else if(n >= 1000 && n <= 9999)	printf("%d", !(n % 1000) ? 1000 : 1000 - n % 1000);
	else if(n >= 10000 && n <= 99999)	printf("%d", !(n % 10000) ? 10000: 10000 - n % 10000);
	else if(n >= 100000 && n <= 999999)	printf("%d", !(n % 100000) ? 100000 : 100000 - n % 100000);
	else if(n >= 1000000 && n <= 9999999)	printf("%d", !(n % 1000000) ? 1000000: 1000000 - n % 1000000);
	else if(n >= 10000000 && n <= 99999999)	printf("%d", !(n % 10000000) ? 10000000 : 10000000 - n % 10000000);
	else if(n >= 100000000 && n <= 999999999)	printf("%d", !(n % 100000000) ? 100000000 : 100000000 - n % 100000000);
	else	printf("1000000000");
	return 0;
}
posted @ 2021-12-21 20:03  Eason_AC  阅读(144)  评论(0)    收藏  举报