Hướng dẫn cho FNUM
Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
Spoiler Alert
Hint 1
- Nhận xét rằng hàm \(f(x) =\) tổng các chữ số của \(x\) nó sẽ giảm rất nhanh
Cụ thể: \(f(x) \leq 9 * \lceil\log_{10}x\rceil\)
Sau đó ta chỉ cần tính f(f(..f(x)..)) tới khi nào 1 ≤ x ≤ 9
Hint 2
- Đầu tiên ta tính \(x = f(input_string)\)
Vì \(f(max\_val) \leq 9 * \lceil\log_{10}(max\_val)\rceil \leq 9 * 1000000\)
Nên khi ta tính trước, ta sẽ đưa số \(x\) về kiểu dữ liệu \(int\)
Hint 3
Online Solving
: Ta có thể không cần nhận xâu
Reference AC code | \(O(\log_{10}n)\) time | \(O(1)\) auxiliary space | Online Solving, Math
C++
inline bool isDigit(char c) { return '0' <= c && c <= '9'; }
int main()
{
int n = 0;
for (char c; isDigit(c = getchar()); n += (c - '0'));
while (n > 9)
{
int new_n = 0;
do new_n += n % 10; while (n /= 10);
n = new_n;
}
cout << n;
return 0;
}
Bình luận