trang chủ / bài tập / times17 / lời giải

Nhân 17

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Nhân 17

Hướng tiếp cận

Nhận xét rằng 17N=16N+N. Trong hệ nhị phân, nhân với 16=24 tương đương với dịch trái 4 bit (thêm 4 chữ số 0 vào cuối). Do đó, ta chỉ cần cộng hai số nhị phân: NN dịch trái 4 bit.

Nhận xét quan trọng

  1. 17=16+1=24+20, nên 17N=N·24+N.
  2. Phép cộng hai số nhị phân thực hiện từ phải sang trái, mang nhớ khi tổng 2.
  3. Kết quả có tối đa 1000+5=1005 chữ số nhị phân.

Thuật toán

  1. Đọc xâu nhị phân s biểu diễn N.
  2. Tạo hai xâu cần cộng:
    • a=s (căn phải, thêm số 0 dẫn đầu cho đủ độ dài)
    • b=s+"0000" (dịch trái 4 bit)
  3. Cộng ab từng bit từ phải sang trái, xử lý nhớ.
  4. Bỏ các số 0 dẫn đầu rồi in kết quả.

Độ phức tạp

  • Thời gian: O(L) với L là số chữ số nhị phân của N.
  • Bộ nhớ: O(L).

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0