LATEST

Kiểm tra số Asmtrong trong C / C++

Trong bài viết này, codehow sẽ hướng dẫn các bạn cách kiểm tra số Armstrong trong C / C++. Đây là một khái niệm khá xa lạ đối với các bạn bắt đầu học ngôn ngữ lập trình đúng không ạ, đừng lo lắng hãy xem ví dụ của nó đã nhé.

Số Armstrong là một số bằng tổng lập phương các chữ số trong số đó. Nghĩa là đem các chữ số trong số đó lập phương lên thì sẽ bằng chính nó.

Ví dụ: Mình có số 153, khi đem lập phương các chữ số của nó rồi cộng lại sẽ như sau: 13 + 53 + 33 = 1 + 125 + 27 = 153 (bằng chính số đó).

Nếu bắt đầu từ số 0, thì các số Armstrong sẽ là: 0, 1, 2, 3, 153, 370, 407, 1634, ... .

Bây giờ chúng ta bắt đầu viết chương trình kiểm tra số Armstrong trong C / C++ thôi nhé!!!

Kiểm tra số Armstrong trong C / C++

Trước khi đi vào viết chương trình kiểm tra số Armstrong trong C / C++, các bạn hãy cùng với mình xem qua thuật toán của nó đã nhé.

int num,copy_of_num,sum=0,rem;
while (num != 0)
   {
      rem = num % 10;
      sum = sum + (rem*rem*rem);
      num = num / 10;
   }

Giả sử mình có num là số cần kiểm tra, copy_of_num là một bản sao của biến num (biến này được dùng để so sánh kết quả). Biến rem là các chữ số trong num và biến sum là tổng các chữ số sau khi lập phương.

Sử dụng vòng lặp while để lặp cho đến khi num = 0. Thực hiện phép tính chia lấy dư để phân tách các chữ số trong num, sau đó lập phương nó lên rồi cộng lại.

Ví dụ: Mình sẽ lấy số 153 để chạy thử thuật toán trên nhé.

  • Vòng lặp 1
    • rem = num % 10 = 153 % 10 = 3.
    • sum = sum + (rem * rem * rem) = 0 + (3 * 3 * 3) = 27.
    • num = num / 10 = 153 / 10 = 15.
  • Vòng lặp 2
    • rem = 15 % 10 = 5.
    • sum = 27 + (5 * 5 * 5) = 152.
    • num = 15 / 10 = 1.
  • Vòng lặp 3
    • rem = 1 % 10 = 1.
    • sum = 152 + (1 * 1 * 1) = 153.
    • num = 1 / 10 = 0.

Khi num = 0 thì vòng lặp kết thúc, lúc này ta được sum = 153 (bằng chính số ban đầu), vậy 153 chính là số Armstrong.

Bây giờ sẽ bắt đầu viết chương trình yêu cầu người dùng nhập vào một số, sau đó kiểm tra số đó có phải là số Armstrong không nhé.

Chương trình C:

#include <stdio.h>

int main(void) {
  int num,copy_of_num,sum=0,rem;
   printf("\nNhập vào một số: ");
   scanf("%d", &num);
   copy_of_num = num;
   while (num != 0)
   {
      rem = num % 10;
      sum = sum + (rem*rem*rem);
      num = num / 10;
   }
   if(copy_of_num == sum)
      printf("%d là số Armstrong", copy_of_num);
   else
      printf("%d không phải là số Armstrong", copy_of_num);
  
   printf("\n-------------------------\n");
   printf("Chương trình này được đăng tại codehow.net");
   return 0;
}

Kết quả:

bai7 01 png

Chương trình C++:

#include <iostream>
using namespace std;
int main()
{
   int num,copy_of_num,sum=0,rem;
   cout<<endl<<"Nhập vào một số: ";
   cin>>num;
   copy_of_num = num;
   while (num != 0)
   {
      rem = num % 10;
      sum = sum + (rem*rem*rem);
      num = num / 10;
   }
   if(copy_of_num == sum)
      cout<<copy_of_num<<" là số Armstrong";
   else
      cout<<copy_of_num<<" không phải là số Armstrong";
   cout<<"\n-------------------------\n";
   cout<<"Chương trình này được đăng tại codehow.net";
}

Kết quả:

bai7 02 png

Kiểm tra số Armstrong trong C / C++ sử dụng hàm

Trong chương trình này mình sẽ viết một hàm để kiểm tra số Armstrong trong C / C++. Điều này rất thuận tiện cho việc chúng ta có thể sử dụng lại hàm để kiểm tra ở nhiều chổ khác nhau trong chương trình.

Chương trình C:

#include <stdio.h>

void isArmstrong(int num){
  int copy_of_num,sum=0,rem;
  copy_of_num = num;
   while (num != 0)
   {
      rem = num % 10;
      sum = sum + (rem*rem*rem);
      num = num / 10;
   }
   if(copy_of_num == sum)
      printf("%d là số Armstrong", copy_of_num);
   else
      printf("%d không phải là số Armstrong", copy_of_num);
}

int main(void) {
  int num;
   printf("\nNhập vào một số: ");
   scanf("%d", &num);
   isArmstrong(num);
  
   printf("\n-------------------------\n");
   printf("Chương trình này được đăng tại codehow.net");
   return 0;
}

Kết quả:

bai7 03 png

Chương trình C++:

#include <iostream>
using namespace std;

void isArmstrong(int num){
  int copy_of_num,sum=0,rem;
  copy_of_num = num;
   while (num != 0)
   {
      rem = num % 10;
      sum = sum + (rem*rem*rem);
      num = num / 10;
   }
   if(copy_of_num == sum)
      cout<<copy_of_num<<" là số Armstrong";
   else
      cout<<copy_of_num<<" không phải là số Armstrong";
}

int main()
{
   int num;
   cout<<endl<<"Nhập vào một số: ";
   cin>>num;
   isArmstrong(num);
   cout<<"\n-------------------------\n";
   cout<<"Chương trình này được đăng tại codehow.net";
}

Kết quả:

bai7 04 png

Như vậy là chúng ta đã cùng nhau tìm hiểu về số Armstrong là gì? Cách kiểm tra số Armstrong trong C / C++. Các bạn nên luyện tập thật nhiều để rèn tính tư duy logic với các bài toán phức tạp hơn nhé. Trong serries bài tập C / C++ của codehow có rất nhiều dạng bài tập cho các bạn tham khảo, hãy ghé thăm nhé !!!

Cùng chuyên mục:

Xóa node khỏi cây nhị phân tìm kiếm

Xóa node khỏi cây nhị phân tìm kiếm

Tìm node Max và Min trong cây nhị phân tìm kiếm

Tìm node Max và Min trong cây nhị phân tìm kiếm

Xuất node con và node lá trong cây nhị phân tìm kiếm

Xuất node con và node lá trong cây nhị phân tìm kiếm

Tìm kiếm trên cây nhị phân tìm kiếm

Tìm kiếm trên cây nhị phân tìm kiếm

Duyệt cây nhị phân tìm kiếm

Duyệt cây nhị phân tìm kiếm

Thêm node vào cây nhị phân tìm kiếm

Thêm node vào cây nhị phân tìm kiếm

Cây nhị phân (Binary tree) là gì? Cơ chế hoạt động của nó

Cây nhị phân (Binary tree) là gì? Cơ chế hoạt động của nó

Cách gộp hai danh sách liên kết đôi

Cách gộp hai danh sách liên kết đôi

Tìm kiếm phần tử trong DSLK đôi

Tìm kiếm phần tử trong DSLK đôi

Xóa node trong DSLK đôi

Xóa node trong DSLK đôi

Chèn node (Insert node) vào DSLK đôi

Chèn node (Insert node) vào DSLK đôi

Duyệt danh sách liên kết đôi

Duyệt danh sách liên kết đôi

Tạo node mới trong DSLK đôi

Tạo node mới trong DSLK đôi

DSLK đôi là gì? Cấu trúc dữ liệu của DSLK đôi

DSLK đôi là gì? Cấu trúc dữ liệu của DSLK đôi

Quản lý sinh viên bằng DSLK đơn

Quản lý sinh viên bằng DSLK đơn

Tìm kiếm và sắp xếp trong DSLK đơn

Tìm kiếm và sắp xếp trong DSLK đơn

Xóa node (Delete node) trong DSLK đơn

Xóa node (Delete node) trong DSLK đơn

Chèn node (Insert node) vào DSLK đơn

Chèn node (Insert node) vào DSLK đơn

Tạo node mới trong DSLK đơn

Tạo node mới trong DSLK đơn

Cấu trúc dữ liệu của DSLK đơn

Cấu trúc dữ liệu của DSLK đơn