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ố 14 kết quả

Đề tài: kiểm tra 1 số xem có là số Amstrong không?

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

    Mặc định kiểm tra 1 số xem có là số Amstrong không?

    kiểm tra 1 số xem có là số Amstrong không?
    x = a1a2...an (a1 , a2, ...,an là các chữ số của x ) được gọi là số Amstrong khi
    x= (a_1)^n + (a2)^n +...+(an)^n
    ví dụ :
    số 153 là số Amstrong vì:
    có 3 chữ số , nên các chữ số 1, 3,5 phải mũ 3
    153 = 1^3 + 5^3 + 3^3

    số 12 không là số Amstrong vì

    12 không bằng 1^2+2^2

  2. #2
    Ngày gia nhập
    12 2006
    Bài viết
    43

    Quá dễ

    + Đầu tiên xem số nhập vào co mấy chữ số, bằng hàm itoa,sau đó dùng strlen lấy độ dài.

    + Sau đó lấy từng chử số ra mủ n lên, dùng 1 biến sum công lại, cuối cùng so sánh.

    Cái này chưa chạy, code nhẫu hừng luôn. sai bỏ qua cho nhé

    PHP Code:
    int LengNum(int i){
    char *str;
    itoa(istr10);
    return 
    strlen(str);
    }

    int isAmstrong(int s){
    int is;
    int sum 0;
    int n LengNum(i);
    while (
    0){
    int temp 10;
    i/10;
    sum += pow(temp,n); //cho nay chac can ep kieu,hay tu viet ham
    }

    if (
    sum == s)
    return 
    1;
    else
    return 
    0;

    Đã được chỉnh sửa lần cuối bởi bathong : 11-11-2008 lúc 10:40 AM.

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

    Trích dẫn Nguyên bản được gửi bởi bathong Xem bài viết
    Quá dễ

    + Đầu tiên xem số nhập vào co mấy chữ số, bằng hàm itoa,sau đó dùng strlen lấy độ dài.

    + Sau đó lấy từng chử số ra mủ n lên, dùng 1 biến sum công lại, cuối cùng so sánh.

    Cái này chưa chạy, code nhẫu hừng luôn. sai bỏ qua cho nhé

    PHP Code:
    int LengNum(int i){
    char *str;
    atoi(istr10);
    return 
    strlen(str);
    }

    int isAmstrong(int s){
    int is;
    int sum 0;
    int n LengNum(i);
    while (
    0){
    int temp 10;
    i/10;
    sum += pow(temp,n); //cho nay chac can ep kieu,hay tu viet ham
    }

    if (
    sum == s)
    return 
    1;
    else
    return 
    0;



    có cách viết nào dễ hiểu hơn không vậy huynh , mấy cái hàm đặc biệt của huynh khó hiểu quá
    thầy em nói là viết cỡ 2 chương trình con để áp dụng

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    có cách viết nào dễ hiểu hơn không vậy huynh , mấy cái hàm đặc biệt của huynh khó hiểu quá
    thầy em nói là viết cỡ 2 chương trình con để áp dụng
    đúng rồi,đầu tiên viết chương trình tách số đó ra từng chữ số và gán lên mảng
    sau đó viết hàm kiểm tra số đó có là số amtrong hay không

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

    Xem thêm ở đây đi bạn.

    Giải thuật là, bạn dùng 1 chương trình con để tách các chữ số trong chuỗi số ra điền và một mảng.

    Nếu bạn nhập số thì dùng n%10 và n/10 để làm, nếu bạn nhập chuỗi thì dung atoi để chuyển chuỗi số thành số.

    Chương trình con thứ 2 tính tổng các giá trị lũy thừa, so sánh với số ban đầu, nếu là chuỗi thì đổi sang số để so sánh.

    Have fun!

  6. #6
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định kiểm tra 1 số xem có là số Amstrong không?

    Chỗ hàm đếm số chữ số của số nhập vào,có thể dùng công thức (int)log10(so_can_kiem_tra)+1 cho nhanh.
    C++ Code:
    1. int n,count;
    2.     cout<<"n=";
    3.     cin>>n;
    4.     count=(int)(log10(n))+1;
    5.     cout<<"\nSo chu so:"<<count;
    Cánh Chym ứ mỏi

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

    uh số Amstrong 3 chữ là số mà có hàng chục hàng trăm hàng đơn vị mũ 3 lên cộgn lại bằng số đó
    còn 4 chữ số thì sao" hè nếu 3 chữ số ta lấy dv*dv*dv+ch*ch*ch+tr*tr*tr=n thì số đó là am strong và ngược lại thì hông phải vb:153=1^3+5^3+3^3

  8. #8
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    Hồi nãy rõ ràng có cái bài kêu in ra tất cả các số Amstrong tới 10000. Mà đâu mất tiêu. Đào mộ lại topic này gửi ké 1 bài :P
    C++ Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define MAX 10000
    4.  
    5. int tach_so(int x, int a[]);
    6. int luy_thua(int a, int x);
    7. int xet_so_Amstrong(int x, int a[], int n);
    8.  
    9. int main()
    10. {
    11.     int so[5];
    12.     int n, i, k;
    13.     for (i = 1; i <= MAX; i++)
    14.     {
    15.         n = tach_so(i, so);
    16.         k = xet_so_Amstrong(i, so, n);
    17.         if (k != 0)
    18.         {
    19.             printf("x = %-5d\tk = %d\n", i, k);
    20.         }
    21.     }
    22.     getch();
    23.     return 0;
    24. }
    25.  
    26. // Thu tu so se bi dao, nhung khong anh huong ket qua
    27. int tach_so(int x, int a[])
    28. {
    29.     int n;
    30.     a[0] = x % 10;
    31.     x = x / 10;
    32.     n = 1;
    33.     while (x > 0)
    34.     {
    35.         a[n] = x % 10;
    36.         x = x / 10;
    37.         n++;
    38.     }
    39.     return n;
    40. }
    41.  
    42. int luy_thua(int a, int x)  // a^x
    43. {
    44.     int i, s;
    45.     s = 1;
    46.     for (i = 0; i < x; i++)
    47.     {
    48.         s *= a;
    49.     }
    50.     return s;
    51. }
    52.  
    53. int xet_so_Amstrong(int x, int a[], int n)
    54. {
    55.     int s, i, k;
    56.     int tam;
    57.     k = 1;
    58.     s = 0;
    59.     while (s < x)
    60.     {
    61.         s = 0;
    62.         for (i = 0; i < n; i++)
    63.         {
    64.             s = s + luy_thua(a[i], k);
    65.         }
    66.         if (tam == s)
    67.             break; // ket qua nhu nhau voi moi k
    68.         k++;
    69.         tam = s;
    70.     }
    71.     if (s == x)
    72.         return k - 1;
    73.     return 0;
    74. }
    Nếu phân tích toán học 1 chút thì có thể viết gọn hơn.
    Đây là 1 bài langman đã viết
    C++ Code:
    1. void bai109(void)
    2.     {
    3.         int a,b,c;
    4.         printf("Các số Amstrong nhỏ 999 là :");
    5.         for (a=1 ; a<=9 ; a++)
    6.          for (b=1 ; b<=9 ; b++)
    7.           for (c=1 ; c<=9 ; c++)
    8.            if (a*a*a+b*b*b+c*c*c==a*100+b*10+c)
    9.             printf("\n %d%d%d " , a,b,c );
    10.     }
    Rẹt rẹt..

  9. #9
    Ngày gia nhập
    01 2012
    Bài viết
    40

    @sim
    Thanks bạn nha^^ hồi nãy tớ đăng cái topic đó áh hihi.. rồi bị del.. huhu T.T
    Kết bạn nhé!
    Vào facebook của tớ :P

  10. #10
    Ngày gia nhập
    06 2013
    Bài viết
    1

    e cũng vừa mới học về c/c++, gặp bài này và đã thử viết code nhưng không biết sai ở đâu, mong các a check giùm!
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    int demso(int);
    int mu(int, int);
    
    int mu(int ix, int in)
    {
        int i, imu=1;
        for (i=1;i<=in;i++)
    	imu*=ix;
        return imu;
    }
    
    int demso(int ix)
    {
        int i;
        for(i=0;ix>0;i++)
        ix/=10;
        return i;
    }
    
    int main()
    {
        int i, num, max, n, tong,du;
        printf("nhap vao gia tri gioi han:");
        scanf("%d",&max);
        for(num=1;num<=max;num++)
        {
                                  i=demso(num);tong=0;
                                  while(num>0)
                                  {
                                            du=num%10;
                                            tong+=mu(du,i);
                                            num=(num-num&10)/10;
                                  }
                                  if(tong==num)
    			                  {
                                               printf("\nso %d la so amstrong",num);
                                               n++;
                                   }
        }printf("vay co %d so thoa man",n);
        getch();
        return 0;
    }

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

  1. Bài tập C Số Amstrong là số gì? In Ra Các Số Amstrong?
    Gửi bởi vodanh122 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 27-09-2014, 11:40 PM
  2. Kỹ thuật C++ dãy số nguyên amstrong
    Gửi bởi tannhim trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 03-04-2013, 12:55 AM
  3. Đoạn ct con kiểm tra số Amstrong luôn trả về 1, tại sao vậy?
    Gửi bởi happy_happy trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 32
    Bài viết cuối: 19-01-2012, 09:11 AM
  4. Kiểm tra có phải số amstrong ko?
    Gửi bởi luckyluke76215 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 10-12-2010, 05:09 PM
  5. Lập trình C Tìm các số Amstrong nhỏ hơn 1000, lỗi không hiển thị được các số có chữ số 0 ở cuối?
    Gửi bởi duydx trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 21-10-2008, 11:53 PM

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