Số Armstrong trong C là số có giá trị bằng tổng lập phương của các chữ số trong số đó. Ví dụ số Armstrong là: 0, 1, 2, 3, 153, 370, 407, 1634, 8208,... Trong bài này chúng ta sẽ đi tìm hiểu về số Armstrong, tạo và in các số armstrong, kiểm tra 1 số có phải số Armstrong trong C không?
Một số ba chữ số Armstrong là một số nguyên sao cho tổng các khối của các chữ số của nó bằng với số đó.
Số Armstrong là một số có chữ số n bằng tổng của các số thứ n của các chữ số. Số đó là tổng các chữ số riêng của mỗi số được nâng lên lũy thừa số chữ số. Ví dụ, 371 là một số Armstrong vì:
371 = (3 * 3 * 3) + (7 * 7 * 7) + (1 * 1 * 1)
Ở đây:
(3 * 3 * 3) = 27
(7 * 7 * 7) = 343
(1 * 1 * 1) = 1
Vì thế:
27 + 343 + 1 = 371
Chương trình C để tạo ra các số Armstrong: trong chương trình của chúng ta, người dùng sẽ nhập hai số nguyên và chúng tôi sẽ in tất cả các số Armstrong giữa hai số nguyên này. Sử dụng vòng lặp for, chúng ta sẽ kiểm tra các số trong phạm vi này, trong vòng lặp, chúng ta gọi hàm check_armstrong trả về '1' nếu một số là Armstrong và '0' ngược lại.
Viết code như sau:
#include
int check_armstrong(int);
int power(int, int);
int main () {
int c, a, b;
printf("nhap hai so nguyen\n");
scanf("%d%d", &a, &b);
for (c = a; c <= b; c++) {
if (check_armstrong(c) == 1)
printf("%d\n", c);
}
return 0;
}
int check_armstrong(int n) {
long long sum = 0, temp;
int remainder, digits = 0;
temp = n;
while (temp != 0) {
digits++;
temp = temp/10;
}
temp = n;
while (temp != 0) {
remainder = temp%10;
sum = sum + power(remainder, digits);
temp = temp/10;
}
if (n == sum)
return 1;
else
return 0;
}
int power(int n, int r) {
int c, p = 1;
for (c = 1; c <= r; c++)
p = p*n;
return p;
}
Đầu ra của chương trình:
Trong đầu ra mẫu, chúng tôi đang in các số Armstrong trong phạm vi [0, 1000000].
Ví dụ # 1: Kiểm tra Armstrong Số ba chữ số
#include
int main()
{
int number, originalNumber, remainder, result = 0;
printf("Nhap mot so nguyen gom ba chu so: ");
scanf("%d", &number);
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber%10;
result += remainder*remainder*remainder;
originalNumber /= 10;
}
if(result == number)
printf("%d la mot so Armstrong.",number);
else
printf("%d khong la mot so Armstrong.",number);
return 0;
}
Đầu ra
Nhap mot so nguyen gom ba chu so: 371
371 la mot so Armstrong.
Ví dụ # 2: Kiểm tra số chữ số Armstrong n chữ số
#include
#include
int main()
{
int number, originalNumber, remainder, result = 0, n = 0 ;
printf("Nhap so nguyen: ");
scanf("%d", &number);
originalNumber = number;
while (originalNumber != 0)
{
originalNumber /= 10;
++n;
}
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber%10;
result += pow(remainder, n);
originalNumber /= 10;
}
if(result == number)
printf("%d la mot so Armstrong.", number);
else
printf("%d khong la mot so Armstrong.", number);
return 0;
}
Đầu ra:
Nhap so nguyen: 1634
1634 la mot so Armstrong.
Trong chương trình này, số chữ số của một số nguyên được tính đầu tiên và được lưu trong biến n . Và, pow () chức năng được sử dụng để tính toán sức mạnh của cá nhân chữ số trong mỗi lần lặp của trong khi vòng lặp.
Bài tập về lập trình C liên quan khác bạn nên đọc: