In dấu phân tách lớp của số nguyên như thế nào?

Nhập vào một số nguyên, xuất ra số nguyên đó với các dấu phẩy (,) phân cách 3 chữ số. Ví dụ 1234567 xuất ra 1,234,567
Mọi người giúp em với. Nghĩ nát óc rồi mà không ra.

Tham khảo printf xem có opt này ko :smiley:

Nếu có thể tách số thành hàng tỷ, triệu, nghìn, đv thì làm được thôi.

1 Like

không có opt đó bạn ơi.

Bạn thử hàm này:

void printfwithcomma (int n) {
    if (n < 0) {
        printf ("-");
        printfwithcomma (-n);
        return;
    }
    if (n < 1000) {
        printf ("%d", n);
        return;
    }
    printfwithcomma (n/1000);
    printf (",%03d", n%1000);
}
1 Like

Một cách đơn giản là chuyển nó về dạng chuỗi, thêm các số 0 vào trước nếu độ dài chưa chia hết cho 3.
Vì dụ 12345 thì biến nó thành “012345”. Sau đó duyệt từ đầu tới cuối, cứ lấy 3 ký tự thì cộng vào chuỗi mới và thêm ký tự “,”. Sau bỏ số chữ 0 ở đầu đi là xong

1 Like

Đã vậy thì tại sao không for từ cuối đến đầu chuỗi, cứ 3 ký tự thì thêm 1 dấu phẩy đến khi nào chỗ ký tự còn lại <= 3 thì thôi ?

4 Likes

cảm ơn bạn, nhưng bài này không dùng chuỗi hay đệ quy được, vì chưa học
chỉ dùng while , for hoặc if giải bài này được không

Nếu vậy bạn thử kiểm tra độ lớn của số nhập vào rồi chia nó lần lượt cho 10^x tương ứng rồi xuất ra cùng với ‘,’ thử xem. Nếu số người dùng nhập vào quá lớn có thể gây lỗi chương trình

1 Like

Cần gì đệ quy nhỉ? Cơ mà không dùng xâu thì trả về dấu ‘,’ kiểu gì?

In thẳng ra stdout:smiley:

1 Like

Nếu chỉ in ra thôi thì có nhiều cách
search trên stack overflow thì có cách này

#include <stdio.h>
#include <locale.h>
int main()
{
    setlocale(LC_NUMERIC, "");
    printf("%'d\n", 123456789);
    return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?