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: Tối ưu Code nhập số nguyên dương rồi đảo ngược số nguyên dương vừa nhập trong C

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

    Mặc định Tối ưu Code nhập số nguyên dương rồi đảo ngược số nguyên dương vừa nhập trong C

    em có bài nhập vào số nguyên dương Vd : 1234--> xuất 4321

    Code của em :

    Code:
    int DaoSo( int n )
    {
         int m =0 ;
         int dv ;
         while ( n!=0)
               {
                     dv=n%10 ;
                     n=n/10 ;
                     m=m*10+dv ;
               }
           return m ;
    }
    Code chạy tốt khi nhập 1 số mà không có số 0 ở đầu hay ở cuối ( ví dụ : 3567 )

    Nhưng nếu nhập số 0 và . Ví dụ ( 5430 --> chỉ ra 345 hoặc 0345 --> 543 )

    hướng giải của em là tách từng số ra lấy số dư n%10 , in số dư đó , rồi cho n /10 , kiếm tra điều kiện nếu n !=0 thì tiếp tục in ra . Cách này code chạy ổn khi nhập 0 nhưng sai yêu cầu đề

    Vấn đề nằm ở cho đề bài không cho sử dụng chuỗi , không sử dụng biến trung gian để lưu trữ . Tìm cách để N giữ nguyên giá trị bằng 1 phép tính toán nào đó ( + , - , * , / chẳng hạn )

    em đã nghĩ mấy ngày vẫn chưa tìm ra , mọi người cho em ý kiến . Thanks all

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Nếu chỉ thuần số thì có thể dùng mẹo chèn thêm vào cuối số một ký tự số cho biết số có bao nhiêu số 0 đi trước

    vd
    số 534 sẽ trở thành 5340; 79157 sẽ thành 791570 (không có 0 dẫn đầu)
    số 0534 sẽ trở thành 5341 (1 số không ở đầu); 0079157 sẽ thành 791572 (2 số không ở đầu)
    số 05340 sẽ trở thành 53401 (1 số không ở đầu); 7915700 sẽ thành 79157000 (không có 0 dẫn đầu)
    Các con toán sẽ dùng %10 để biết số này có bao nhiêu 0 ở đầu và /10 để biết thực trị số này.

    Tuy nhiên, mẹo nào cũng không thể thoát qua khi nhập số, các hàm nhập số đều bỏ đi các số 0 dẫn đầu.
    Ngoài việc sử dụng chuỗi (hoặc ký tự qua hàm nhập getch), không có cách nào để biết được là người dùng nhập vào 0123 thay vì 123

  3. #3
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. long DaoSo( long n );
    4. int main()
    5. {
    6.     long n=54300;//thay cho lenh nhap va kiem tra dieu kien nhap
    7.    
    8.     while (n%10==0)
    9.     {
    10.           printf("0");
    11.           n/=10;
    12.     }
    13.     printf("%ld",DaoSo(n));
    14.     getch();
    15.     return 0;
    16. }
    17. long DaoSo( long n )
    18. {
    19.      long m =0 ;
    20.      int dv ;
    21.      while ( n!=0)
    22.            {
    23.                  dv=(int)n%10 ;
    24.                  n=n/10 ;
    25.                  m=m*10+dv ;
    26.            }
    27.        return m ;
    28. }
    code này chỉ đổi số có dạng 54300 ==> 00345
    còn trường hợp 00345 ==> 54300 thì mình không biết
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

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

    ai biết viết code bài này bằng đệ quy không ???
    mình viết đc như thế này:
    Code:
    int sodao(int n){   
        if(n/10==0)
        return n;
        else 
        int m=1000;
        return sodao(n/10)+((n%10)*10);
        }
    code trên chỉ đúng với số 2 chữ số vì chỗ return cuối mình chỉ lấy (n%10)*10... nếu số 3 chữ số thì chỗ đó phải lấy (n%10)*100 và 4 chữ số thì (n%10)*1000,v.v... nhưng làm hoài ko ra...T__T... làm sao để khi đệ qui thì 3 chữ số thì (n%10)*100, 2 chữ số thì (n%10)*10,v.v... ví dụ như:

    đệ qui: sodao(123) thì bằng sodao(123/10)+(123%10)*100
    sodao(12)=sodao(12/10)+(12%10)*10

    mọi người giúp mình với nha

  5. #5
    Ngày gia nhập
    08 2011
    Bài viết
    98

    C Code:
    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5.     int n;
    6.     cout << "nhap so can dao : \n";
    7.     cin >> n;
    8.     if( n > 0 )
    9.     {
    10.         while(n!= 0)
    11.         {
    12.             cout << (char)( '0' + (n % 10) );
    13.             n /= 10;
    14.         }
    15.         cout << endl;
    16.     }
    17.     else
    18.     {
    19.         cout << "So ngay khong the viet nguoc lai duoc" << endl;
    20.     }
    21.     system("PAUSE");
    22.     return 0;
    23. }
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

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

    Mặc định Tối ưu Code nhập số nguyên dương rồi đảo ngược số nguyên dương vừa nhập trong C

    còn hàm đệ quy thì sao bạn??? giúp mình với nha

  7. #7
    Ngày gia nhập
    12 2010
    Bài viết
    1

    void daoso(int n)
    {
    if(n!=0)
    {
    printf("%d",n%10);
    daoso(n/10);
    }
    }


    bài đệ quy đảo ngược n này

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trích dẫn Nguyên bản được gửi bởi nth0504 Xem bài viết
    void daoso(int n)
    {
    if(n!=0)
    {
    printf("%d",n%10);
    daoso(n/10);
    }
    }

    bài đệ quy đảo ngược n này
    Moi bài cũ cả năm trời lên trả lời mà cũng sai. Yêu cầu bảo đảo ngược số chứ đâu có bảo in ra ngược!!!

    C Code:
    1. // hàm đệ quy đảo ngược một số nguyên dương
    2.  
    3. int DaoSo(int so)
    4. {
    5.     static int kqTam = 0; // biến để chứa kết quả tạm
    6.  
    7.     if (so < 10)
    8.     {
    9.         so += kqTam * 10; // giữ trị lại, vì kqTam sẽ được hoàn nguyên
    10.         kqTam = 0; // hoàn nguyên trị ban đầu để hàm có thể tính số khác
    11.         return so;
    12.     }
    13.     kqTam = kqTam * 10 + so % 10;
    14.     return DaoSo(so / 10);
    15. }

    tb. Vấn đề của nguyên chủ, không cho sử dụng biến tạm thì tôi chịu thua. Bạn nào có cao kiến thì cứ thử cho mọi người cùng học hỏi.

  9. #9
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Theo em, có thể "chơi bẩn" ở đây, vì tham số nhập bằng giá trị cũng có thể sử dụng như 1 biến cục bộ, nên ta có thể "chơi bẩn" kiểu :

    C++ Code:
    1. int Func(int n, int nAgaint, int nAgaintAgaint); // cout<<Func(n,n,n); Sử dụng nAgaint và nAgaintAgaint như biến cục bộ.

    Em nghĩ vấn đề ở đây là làm sao để phát hiện ra công thức để tính toán từ 1 số và kết quả là 1 số có các chữ số đã được đảo. ( Em đang nghĩ ... )

  10. #10
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    ^
    Dùng đệ quy anh ạ. Như vậy sẽ giải quyết được tất cả vấn đề

    Trích dẫn Nguyên bản được gửi bởi azurelonely Xem bài viết
    C Code:
    1. int backsee(int number,int result=0)
    2. {
    3.     if (number==0) return result;
    4.     return backsee(number/10,result*10+number%10);
    5. }

    ví dụ

    trong main bạn gọi printf("So dao nguoc cua 12345 la : %d ",backsee(12345));
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

Các đề tài tương tự

  1. Bài tập C giải thuật nhập vào số nguyên n in ra n số nguyên tố đầu tiên?
    Gửi bởi LTC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 48
    Bài viết cuối: 25-04-2013, 07:40 PM
  2. Database cách nhập nhiều nguyên liệu cho một món ăn trong một form quản lý nguyên liệu món ăn
    Gửi bởi mamachue92 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 31-10-2012, 09:55 AM
  3. Game Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên trên C#?
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 08-06-2011, 11:12 PM
  4. Bài tập C Bài toán nhập xuất 2 số nguyên viết bằng code assembly
    Gửi bởi kidqn trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 3
    Bài viết cuối: 28-04-2011, 01:56 PM
  5. Trả lời: 16
    Bài viết cuối: 16-07-2010, 06:44 AM

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