Số IO là gì?
Số IO được tạo ra dành cho mục đích thực hành kỹ thuật lập trình với vòng lặp.
- Đếm số lượng ký số nguyên.
- Tính toán lũy thừa.
Số IO của 1 số là 1 ánh xạ thập phân theo 10 mũ số lượng ký số trừ cho chính nó sao cho số lượng ký số của kết quả phải bằng với số lượng ký số của nó.
* Số IO chỉ dùng để thực hành lập trình, không phải các con số toán học chính thống.
Công thức
Ví dụ
Tính số IO của số 395
- 395 có 3 ký số nên cần tính 10 mũ 3 là 1000.
- Lấy 1.000 - 395 được 605.
- 605 có 3 ký số bằng với 395 cũng có 3 ký số vậy 605 là IO của 395.
Tính số số IO của số 9991
- 9991 có 4 ký số nên cần tính 10 mũ 4 là 10.000.
- Lấy 10.000 - 9991 được 9.
- 9 có 1 ký số không bằng với 9991 có 3 ký số vậy không tồn tại IO của 9991.
Giải thuật trong lập trình
- Xét số N, nếu là số nhỏ hơn 10 thì không tồn tại số IO.
- Đếm số lượng ký số length_N của số N.
- Tìm số có giá trị M sao cho kết quả là 10 ^ length_N - N.
- Tính số lượng ký số length_M của số M.
- So sánh length_M và length_N, nếu bằng nhau thì M chính là số IO, ngược lại không tồn tại số IO của N.
Hàm tính số IO trên C
int countNumberOfDigits(int _number) { int lengthNumber = 1; while (_number >= 10) { _number /= 10; lengthNumber++; } return lengthNumber; } int computeTenTo(int _number) { int result = 1; for (int index = 0; index < _number; index++) result *= 10; return result; } int computeSTDIONumber(int _number) { if (_number < 10) return -1; int length_N = countNumberOfDigits(_number); int M = computeTenTo(length_N) - _number; return countNumberOfDigits(M) == length_N ? M : -1; }