Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Hỏi về bài tập tìm số ngược

  1. #1
    Ngày gia nhập
    07 2008
    Bài viết
    21

    Mặc định Hỏi về bài tập tìm số ngược

    PHP Code:
    #include<conio.h>
    #include<stdio.h>

    unsigned long muoi_mu_x(unsigned int x){
         
    unsigned long k;
         if(
    x==0)k=1;
         else 
    k=10*muoi_mu_x(--x);
         return 
    k;
    }
    main(){
             
    unsigned int x,i,temp,d=0,s=0;
             
    printf("nhap x");scanf("%d",&x);         
             
    temp=x;
             while(
    x>0){
                      
    x=(int)(x/10);
                      
    d++;
                          }
    /*tại sao dùng do{....} while(x<=0); thì lại sai?*/
             
    x=temp;
             
    unsigned int a[d];
             while(
    x>0){
                            for(
    i=0;i<d;i++){
                                 
    a[i]=(x%10);
                                 
    x=(int)(x/10);
                                 
    s=s+a[i]*muoi_mu_x(d-i-1);
    /*Cho mình hỏi sao chỗ này dùng pow(10,d-i-1) thay cho muoi_mu_x(d-i-1)
    thì lại sai mặc dù đã #include<math.h>?*/
                                 
    }
                                 }
    printf("so nguoc cua x la %d",s);
    getch();

    Mình mới học đến mảng thôi nên không biết thuật toán nào hay hơn
    các bạn cho mình code để tham khảo nhé
    Thanks
    Đã được chỉnh sửa lần cuối bởi langman : 13-09-2008 lúc 02:22 PM. Lý do: cho code vào tag code nhé

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    /*tại sao dùng do{....} while(x<=0); thì lại sai?*/
    thằng do{ .... }while nó khác với thằng while ở chổ là nó làm xong trong phần { ... } rồi mới kiểm tra điều kiện trong vòng while.
    còn thằng while nó kiểm tra nếu điều kiện trong while đúng thì nó mới làm.

    ps: bạn bỏ code ở đây khó đọc quá. bạn có thể bỏ nó vào giữa tag [php] hoặc tag [code] thì nó sẽ dễ đọc hơn.


    chúc bạn thành công.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 08-09-2008 lúc 04:08 PM.

  3. #3
    Ngày gia nhập
    07 2008
    Bài viết
    21

    biết là thế nhưng hình như không phải sai ở chỗ này
    chứ như thế thì mình cũng biết
    thanks bạn

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    /*tại sao dùng do{....} while(x<=0); thì lại sai?*/
    Đúng như zkday2696 nói, và trong trường hợp này dùng do ...while thì d sẽ lớn hơn khi dùng while... 1 đơn vị, vì vậy kết quả không như ý muốn, bạn có thể test lại bằng cách in giá trị d ra màn hình trong mỗi TH.
    Còn về phần dùng pow, không biết bạn dùng trình biên dịch gì nhưng mình dùng thấy vẫn tốt, mình dùng Code::Block

    Có một cách khác, nếu bài này mình nhận giá trị x là một chuỗi kí tự số thì dễ dàng in ra kết quả mong muốn, nếu muốn dùng x để tính toán thì có thể dùng các hàm đổi số thành chuỗi và ngược lại để thực hiện.
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 08-09-2008 lúc 04:45 PM.

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    AYS 107
    Bài viết
    41

    Trích dẫn Nguyên bản được gửi bởi RedHatLinux9 Xem bài viết
    #include<conio.h>
    #include<stdio.h>

    unsigned long muoi_mu_x(unsigned int x){
    unsigned long k;
    if(x==0)k=1;
    else k=10*muoi_mu_x(--x);
    return k;
    }
    main(){
    unsigned int x,i,temp,d=0,s=0;
    printf("nhap x");scanf("%d",&x);
    temp=x;
    while(x>0){
    x=(int)(x/10);
    d++;
    }
    /*tại sao dùng do{....} while(x<=0); thì lại sai?*/
    x=temp;
    unsigned int a[d]; /*Cái này là gì thế cậu*/
    while(x>0){
    for(i=0;i<d;i++){
    a[i]=(x%10);
    x=(int)(x/10);
    s=s+a[i]*muoi_mu_x(d-i-1);
    /*Cho mình hỏi sao chỗ này dùng pow(10,d-i-1) thay cho muoi_mu_x(d-i-1)
    thì lại sai mặc dù đã #include<math.h>?*/
    }
    }
    printf("so nguoc cua x la %d",s);
    getch();
    }
    Mình mới học đến mảng thôi nên không biết thuật toán nào hay hơn
    các bạn cho mình code để tham khảo nhé
    Thanks
    Cậu xem lại cái chỗ mực đỏ nhé
    I don't wanna waste another day

  6. #6
    Ngày gia nhập
    07 2008
    Bài viết
    21

    Mặc định Hỏi về bài tập tìm số ngược

    Trích dẫn Nguyên bản được gửi bởi developer Xem bài viết
    Cậu xem lại cái chỗ mực đỏ nhé
    cái đó là mảng a gồm d phần tử
    kòn về d đã được tính ở trên nên đâu có gì sai?

  7. #7
    Ngày gia nhập
    07 2008
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi QuangHoang Xem bài viết
    Đúng như zkday2696 nói, và trong trường hợp này dùng do ...while thì d sẽ lớn hơn khi dùng while... 1 đơn vị, vì vậy kết quả không như ý muốn, bạn có thể test lại bằng cách in giá trị d ra màn hình trong mỗi TH.
    Còn về phần dùng pow, không biết bạn dùng trình biên dịch gì nhưng mình dùng thấy vẫn tốt, mình dùng Code::Block

    Có một cách khác, nếu bài này mình nhận giá trị x là một chuỗi kí tự số thì dễ dàng in ra kết quả mong muốn, nếu muốn dùng x để tính toán thì có thể dùng các hàm đổi số thành chuỗi và ngược lại để thực hiện.
    cảm ơn bạn
    đúng là nếu để do...while thì chỉ số chạy không đúng
    mình dùng dev c++

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    AYS 107
    Bài viết
    41

    Trích dẫn Nguyên bản được gửi bởi RedHatLinux9 Xem bài viết
    cái đó là mảng a gồm d phần tử
    kòn về d đã được tính ở trên nên đâu có gì sai?
    Số phần tử của mảng phải là hằng số. Cho dù cậu có tính d ở trên rồi thì d vẫn là biến thôi, không phải là hằng
    I don't wanna waste another day

  9. #9
    Ngày gia nhập
    04 2008
    Bài viết
    336

    developer nói đúng đấy, muốn có đúng số phần tử cần thiết cho mảng thì bạn nên xài cấp phát động nhé.
    code ra gió bão

  10. #10
    Ngày gia nhập
    07 2008
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi developer Xem bài viết
    Số phần tử của mảng phải là hằng số. Cho dù cậu có tính d ở trên rồi thì d vẫn là biến thôi, không phải là hằng
    mình cứ tưởng chỉ cần giá trị của d cố định là được
    hóa ra không được xài biến à
    thanks bạn đã nhắc nhở

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