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ố

Đếm số thuần nguyên tố trong một khoảng

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