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;
}
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