JavaScript is required

Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau là gì?

char * functionD (char *number,int n,int m)

{ static char ketqua[17]

char chuso[] = “0123456789ABCDEF”;

int i = 0, giatri = 0, len;

len = strlen(number);

while (i < len) {

giatri = giatri * n + (strchr(chuso,number[i]) - chuso);

i++; }

i = 16;

ketqua[17] = 0;

do {

ketqua[i] = chuso[giatri % m]

giatri /= m;

i--;

} while (giatri > 0);

return (ketqua + i + 1);

}

int main() {

unsigned n = 10, m = 9;

char number[17] = 123”;

cout << functionD(number,n,m);

return 0;

}

A.

1111011

B.

173

C.

146

D.

7B

Trả lời:

Đáp án đúng: C


Đoạn code thực hiện chuyển đổi một số từ hệ cơ số n sang hệ cơ số m. Trong hàm `functionD`: 1. **`char chuso[] = “0123456789ABCDEF”`**: Mảng này chứa các ký tự số sử dụng trong các hệ cơ số từ 2 đến 16. 2. **`len = strlen(number)`**: Tính độ dài chuỗi `number`. 3. **`while (i < len)`**: Vòng lặp này chuyển đổi chuỗi `number` từ hệ cơ số `n` sang hệ cơ số 10 (giá trị `giatri`). - `strchr(chuso, number[i]) - chuso` trả về vị trí của ký tự `number[i]` trong chuỗi `chuso`, tương ứng với giá trị số của ký tự đó trong hệ cơ số `n`. - `giatri = giatri * n + ...` cập nhật giá trị `giatri` bằng cách nhân giá trị hiện tại với `n` và cộng thêm giá trị số của ký tự hiện tại. 4. **`ketqua[17] = 0`**: Gán ký tự null vào cuối chuỗi `ketqua` để đảm bảo nó là một chuỗi C hợp lệ. 5. **`do { ... } while (giatri > 0)`**: Vòng lặp này chuyển đổi giá trị `giatri` (hệ cơ số 10) sang hệ cơ số `m` và lưu vào chuỗi `ketqua`. - `ketqua[i] = chuso[giatri % m]` gán ký tự tương ứng với phần dư của `giatri` khi chia cho `m` vào vị trí `i` của chuỗi `ketqua`. - `giatri /= m` cập nhật giá trị `giatri` bằng cách chia cho `m`. - `i--` giảm chỉ số `i` để ghi các chữ số tiếp theo vào chuỗi `ketqua` từ phải sang trái. 6. **`return (ketqua + i + 1)`**: Trả về con trỏ đến ký tự đầu tiên của chuỗi `ketqua` (bỏ qua các ký tự 0 ở đầu nếu có). Trong hàm `main`: - `n = 10`, `m = 9`, `number = "123"` - Gọi hàm `functionD(number, n, m)` để chuyển số "123" từ hệ cơ số 10 sang hệ cơ số 9. - "123" (hệ 10) = 1 * 10^2 + 2 * 10^1 + 3 * 10^0 = 100 + 20 + 3 = 123. - Chuyển 123 sang hệ 9: - 123 / 9 = 13 dư 6 - 13 / 9 = 1 dư 4 - 1 / 9 = 0 dư 1 Vậy 123 (hệ 10) = 146 (hệ 9). Vậy đáp án đúng là C. 146

Câu hỏi liên quan