Chuyển số hệ thập lục phân và cho biết giá trị thập phân tương ứng

Hệ thập lục phân dùng 16 ký số bao gồm các ký tự 0… 9 và A, B, C, D, E ,F. Các ký số A, B, C, D, E, F có giá trị tương ứng trong hệ thập phân như sau: A là 10, B là 11, C là 12, D là 13, E là 14, F là 15. Hãy viết chương trình cho nhập vào ký tự biểu diễn một ký số của hệ thập lục phân và cho biết giá trị thập phân tương ứng. Trường hợp ký tự nhập vào không thuộc các ký số trên, đưa ra thông báo lỗi: “Hệ thập lục phân không dùng ký số này”.

mọi người nói sơ qua thôi ạ . kỹ quá lại thành không học được gì

merged to the #1 post by noname00

Dùng 1 switch case khủng 16 case :smiley:

3 Likes

hoặc dùng harsh table .

1 Like

em mơi học c++ thôi :<<

Nếu là mình:

  • Dùng một chuỗi có đúng 16 kí tự để lưu từ 0-9A-F. Chỉ số chính là giá trị của kí tự đó.
  • 1 hàm để tìm và lấy giá trị của kí tự, trả về -1 nếu không tìm thấy (kí tự không hợp lệ).
  • Hàm chính sẽ duyệt từng kí tự ở chuỗi đầu vào và gọi đến hàm trên để lấy giá trị. Nếu giá trị là -1 nghĩa là chuỗi không hợp lệ, thông báo và ngừng. Nếu giá trị hợp lệ, dùng phép nhân và cộng dồn để được giá trị thập phân.

Có chi tiết quá không nhỉ?
:thinking:

3 Likes

ah không để ý c++

if character >= '0' and character <= '9':
    return character - '0';
if character >= 'a' and character <= 'f':
   return character - 'a' + 10;
//nếu muốn có thể làm thêm cái if cho upper case
return -1;

đấy còn từ đó làm tiếp như nào chắc bạn làm dc, hệ thập phân thì 10^0, 10^2, 10² …
thì hex: 16^0, 16^1, 16² …

1 Like

Mình nghĩ bạn nên làm bài xuôi trước (chuyển cơ số 10 sang cơ số 16). Làm được cái kia chắc là ngược lại không còn gì khó khăn đâu.

  1. Đầu tiên nhận input vào một mảng char.
  2. Upper input thành viết hoa.
  3. Duyệt mảng, nếu ký tự nào không nằm trong khoảng ‘0’ -> ‘9’ hoặc ‘A’ -> ‘F’ thì không hợp lệ.
  4. Tách số gốc bằng cách trừ đi offset. Nếu trong khoảng ‘0’ > ‘9’ thì trừ đi ‘0’. Nếu khoảng ‘A’ > ‘F’ thì trừ đi ‘A’ và + 10.
  5. Nhân các số lại theo hệ số 16 thì được hệ 10.
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?