Lập trình căn bản C: Kiểm tra 1 số có là số amstrong hay không?

Đề bài: nhận vào 1 số nguyên dương N. Kiểm tra xem số N có phải là số Amstrong hay không? Sau đó hãy in ra các số amstrong có 3, 4 chữ số.

Số Amstrong (còn gọi là là narcissistic number hoặc pluperfect digital invariants - PPDI) nếu tổng lũy lũy thừa bậc n của các chữ số của nó bằng chính nó.

Ví dụ: 153 là số amstrong vì 153 = 1^3 + 5^3 + 3^3,
            tương tự 370 cũng là 1 số amstrong vì 370 = 3^3 + 7^3 + 0^3

Bài giải:


#include <stdio.h>
int SoChuSo(int n){
int
d = 0;
while
(n>0){
d++;
n=n/10;
}

return
d;
}


int
LuyThua (int x,int n){
int
kq = 1;
for
(int i=0;i<n;i++)
kq=kq*x;
return
kq;
}


int
LaSoAmstrong(int n){
int
n1=n;
int
n2=0;
int
scs = SoChuSo(n);
while
(n1>0){
int
k = n1%10;
n2+=LuyThua(k,scs);
n1=n1/10;
}

return
n == n2;

}

int
main(){
/*int n;
printf("nhap so n: ");
scanf("%d",&n);
if (LaSoAmstrong(n)){
printf("So %d la so Amstrong",n);
}
else{
printf("So %d khong la so Amstrong",n);
}*/

printf("Cac so amstrong co 3,4 chu so la: \n");
for
(int i=100;i<=9999;i++){
if
(LaSoAmstrong(i))
printf("%5d",i);
}

return
0;
}

Xem Video: 

Bài liên quan

Bài liên quan