Tìm số Amstrong trong khoảng cho trước

đề bài:
Viết chương trình cho phép nhập vào hai số nguyên dương và tìm tất cả các số Amstrong (là số có tổng các lũy thừa bậc n của các chữ số của nó bằng chính nó - với n là số chữ số) nằm trong khoảng đó (nếu không tồn tại số nào thì in ra 0)
INPUT
10 1000
OUTPUT
153 370 371 407
bài giải:


#include <iostream>
#include <cmath>
using namespace std;

int n, m;

void input() {
 cin >> n >> m;
}

int socs(int x) {
 int dem = 0;
 while(x > 0) {
  x = x/10;
  dem++;
 }
 return dem;
}


bool isAmstrong(int x) {
 int tmp = x;
 int soMu = socs(x);
 int tong = 0;
 while(x > 0) {
  int t = x %10;
  int mut =pow(t, soMu);
  tong += mut;
  x/=10;
 }
 if(tong == tmp) return true;
 return false;
}

void findAmstrong() {
 int dem = 0;
 if(n < m) {
  for(int i = n; i<=m; i++) {
   if(isAmstrong(i)) {
    dem++;
    cout << i << " ";
   }
  }
 } else {
  for(int i = m; i <= n; i++) {
   if(isAmstrong(i)) {
    dem++;
    cout << i << " ";
   }
  }
 }
 if(dem == 0)
  cout << "0";
}

int main() {

 input();
 findAmstrong();
}

Nhận xét

Bài đăng phổ biến từ blog này

Đổi chỗ chữ số đầu tiên và chữ số cuối cùng của một số

Chuyển đơn vị đo nhiệt độ C và F

Tìm số đẹp (lộc phát)