Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Xin góp ý về vấn đề code của mình

  1. #1
    Ngày gia nhập
    08 2021
    Bài viết
    3

    Mặc định Xin góp ý về vấn đề code của mình

    Em chào anh chị trong nhóm, em là thành viên mới, em mới học c++. Em có bài này mà em không giải quyết được.
    Viết chương trình chấp nhận chữ số 7-9 số nguyên và lặp lại số với dấu phẩy giữa mọi ba chữ số từ bên phải. Kiểm tra nó với các con số 1234567, 87654321, 20300045 và 10000000.

    Nhưng khi em bấm vào số 10000000 thì nó hiện ra 10,0,0 nó mất hết số không, mà không làm thành số như vầy 100,000,00
    Mong anh chị giúp em. Cám ơn anh chị.

    Đây là code em viết
    #include <iostream>

    using namespace std;
    int main()
    {
    int leadingDigits, middleDigits, lastDigits;
    int tempValue, original;
    cout<<"Please enter 7- to 9-digit number.\n";
    cin>>original;
    tempValue = original / 1000;
    lastDigits = original % 1000;

    leadingDigits = tempValue / 1000;
    middleDigits = tempValue % 1000;

    cout<<"The number with commas is "<<leadingDigits;
    cout<<","<<middleDigits<<","<<lastDigits<<endl;
    return 0;
    }

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    742

    Vấn đề là thế này. Bạn có số x = 0 và bạn định in nó ra bằng cout << x. Bạn kỳ vọng kết quả là 000, nhưng kết quả thực tế là 0.

    Nguyên nhân, xâu 0 là hình thức mặc định của số 0.

    Giải pháp, bạn hãy tìm hiểu chủ đề C++ output stream manipulator. Cái bạn cần có thể tìm thấy từ 2 manipulator: setwsetfill.

    Đấy là mình nghĩ thế, chứ mình chưa thực nghiệm. Thực nghiệm là việc của bạn.

    Ngoài ra, còn một giải pháp tiềm năng khác là std::format. Và nếu bạn đã học ngôn ngữ C, hãy ôn lại printf().

    Ngoài chủ đề, bài này có thể giải quyết bằng xâu (string) hơn là số (number).



    P/S. Bạn nên dùng từ cho chính xác. Phân biệt số (number) và chữ số (digit).
    Viết chương trình chấp nhận chữ số 7-9 số nguyên
    Hãy viết một chương trình chấp nhận một số nguyên có từ 7 đến 9 chữ số.
    Đã được chỉnh sửa lần cuối bởi Ada : 17-08-2021 lúc 11:55 AM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  3. #3
    Ngày gia nhập
    02 2016
    Bài viết
    328

    Số nguyên 7-9 chữ số là long. Dùng int gặp các hệ thống cũ có thể bị vấn đề.

    Đề bài cho chỉ đến 9 chữ số cho nên có thể dùng cách ngắt nó ra 3 đoạn.
    Trên thực tế, bài này dùng đệ quy đúng hơn.
    Code đệ quy:
    C++
    void ttt(long n)
    {
    if (n < 1000) cout << n;
    else {
    ttt(n / 1000);
    cout << ((n < 1000)? "" : ",") << setfill('0') << setw(3) << n % 1000;
    }
    }

    C:
    void ttt(long n)
    {
    if (n < 1000) printf("%ld", n);
    else {
    ttt(n / 1000);
    long n1 = n % 1000;
    printf("%s%s%ld", ((n<1000)? "" : ","), ((n1<10)? "00" : ((n1<100)? "0": "")), n1);
    }
    }

    Lưu ý: code trên dùng hằng số 1000 hơi nhiều. Theo lập trình thì hằng số như vậy gọi là "magic numbers". Với code C người ta dùng #define để tránh magic numbers:

    #define NGATDOAN 1000

  4. #4
    Ngày gia nhập
    08 2021
    Bài viết
    3

    Dạ em cám ơn ạ. Em sẽ tìm hiểu output stream manipulator

    - - - Nội dung đã được cập nhật ngày 17-08-2021 lúc 11:25 PM - - -

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Vấn đề là thế này. Bạn có số x = 0 và bạn định in nó ra bằng cout << x. Bạn kỳ vọng kết quả là 000, nhưng kết quả thực tế là 0.

    Nguyên nhân, xâu 0 là hình thức mặc định của số 0.

    Giải pháp, bạn hãy tìm hiểu chủ đề C++ output stream manipulator. Cái bạn cần có thể tìm thấy từ 2 manipulator: setwsetfill.

    Đấy là mình nghĩ thế, chứ mình chưa thực nghiệm. Thực nghiệm là việc của bạn.

    Ngoài ra, còn một giải pháp tiềm năng khác là std::format. Và nếu bạn đã học ngôn ngữ C, hãy ôn lại printf().

    Ngoài chủ đề, bài này có thể giải quyết bằng xâu (string) hơn là số (number).



    P/S. Bạn nên dùng từ cho chính xác. Phân biệt số (number) và chữ số (digit).

    Hãy viết một chương trình chấp nhận một số nguyên có từ 7 đến 9 chữ số.
    Dạ em cám ơn ạ. Em sẽ tìm hiểu output stream manipulator

    - - - Nội dung đã được cập nhật ngày 17-08-2021 lúc 11:27 PM - - -

    Trích dẫn Nguyên bản được gửi bởi NguNhuheo Xem bài viết
    Số nguyên 7-9 chữ số là long. Dùng int gặp các hệ thống cũ có thể bị vấn đề.

    Đề bài cho chỉ đến 9 chữ số cho nên có thể dùng cách ngắt nó ra 3 đoạn.
    Trên thực tế, bài này dùng đệ quy đúng hơn.
    Code đệ quy:
    C++
    void ttt(long n)
    {
    if (n < 1000) cout << n;
    else {
    ttt(n / 1000);
    cout << ((n < 1000)? "" : ",") << setfill('0') << setw(3) << n % 1000;
    }
    }

    C:
    void ttt(long n)
    {
    if (n < 1000) printf("%ld", n);
    else {
    ttt(n / 1000);
    long n1 = n % 1000;
    printf("%s%s%ld", ((n<1000)? "" : ","), ((n1<10)? "00" : ((n1<100)? "0": "")), n1);
    }
    }

    Lưu ý: code trên dùng hằng số 1000 hơi nhiều. Theo lập trình thì hằng số như vậy gọi là "magic numbers". Với code C người ta dùng #define để tránh magic numbers:

    #define NGATDOAN 1000
    Dạ em cám ơn ạ. Em sẽ tìm hiểu vấn đề này ạ.

  5. #5
    Ngày gia nhập
    02 2016
    Bài viết
    328

    Code C, đệ quy căn bản, in ra từng chữ số (code bài #3 ở trên in từng cụm 3 chữ số)

    void ttt(long n)
    {
    static int digits = 0;
    if (n <= 0 && digits != 0) return; /* n == 0 là hết số, điểm quay về của đệ quy */
    /* tuy nhiên, vẫn cần xét số chữ số đã đếm, đề phòng trường hợp n ban đầu là 0 */
    digits++; /* đếm tổng số chữ số */
    ttt(n / 10);
    printf("%ld", n % 10);
    if (--digits > 0 && digits % 3 == 0) printf("%c", ','); /* in dấu phẩy nếu số chữ số còn lại chia chẵn cho 3 */
    }

  6. #6
    Ngày gia nhập
    08 2021
    Bài viết
    3

    Mặc định Xin góp ý về vấn đề code của mình

    Trích dẫn Nguyên bản được gửi bởi NguNhuheo Xem bài viết
    Code C, đệ quy căn bản, in ra từng chữ số (code bài #3 ở trên in từng cụm 3 chữ số)

    void ttt(long n)
    {
    static int digits = 0;
    if (n <= 0 && digits != 0) return; /* n == 0 là hết số, điểm quay về của đệ quy */
    /* tuy nhiên, vẫn cần xét số chữ số đã đếm, đề phòng trường hợp n ban đầu là 0 */
    digits++; /* đếm tổng số chữ số */
    ttt(n / 10);
    printf("%ld", n % 10);
    if (--digits > 0 && digits % 3 == 0) printf("%c", ','); /* in dấu phẩy nếu số chữ số còn lại chia chẵn cho 3 */
    }
    Em cám ơn ạ. Em sẽ tìm hiểu thêm ạ.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn