Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

อาร์มสตรอง ตัวเลขระหว่างสองจำนวนเต็ม?


จำนวนเต็มเรียกว่าหมายเลขลำดับอาร์มสตรอง n หากทุกหลักแยกออกและลูกบาศก์และสรุปผลรวมจะเหมือนกับตัวเลขเช่น abcd... =a 3 + b 3 + ค 3 + ง 3 + ...

ในกรณีของตัวเลขอาร์มสตรอง 3 หลัก ผลรวมของลูกบาศก์ของแต่ละหลักจะเท่ากับตัวเลขนั้นเอง ตัวอย่างเช่น:

153 =1 3 + 5 3 + 3 3 // 153 คือเลขอาร์มสตรอง

Input: Enter two numbers(intervals):999 9999
Output: Armstrong numbers between 999 and 9999 are: 1634 8208 9474

คำอธิบาย

1634 = 13+63+33+43
= 1+216+27+64
= 1634

วิธีการดำเนินการด้านล่างนั้นง่าย เราสำรวจผ่านตัวเลขทั้งหมดในช่วงที่กำหนด สำหรับทุกๆ ตัวเลข เราจะนับจำนวนหลักในนั้นก่อน ให้จำนวนหลักในจำนวนปัจจุบันเป็น n เราหาผลรวมของลูกบาศก์ของตัวเลขทั้งหมด หากผลรวมเท่ากับ I ให้พิมพ์ตัวเลข

ตัวอย่าง

#include <stdio.h>
#include <math.h>
int main() {
   int low = 100;
   int high = 400;
   printf("The amstrong numbers between %d and %d is \n",low,high);
   for (int i = low+1; i < high; ++i) {
      int x = i;
      int n = 0;
      while (x != 0) {
         x /= 10;
         ++n;
      }
      int pow_sum = 0;
      x = i;
      while (x != 0) {
         int digit = x % 10;
         pow_sum += pow(digit, n);
         x /= 10;
      }
      if (pow_sum == i)
         printf("%d ", i);
   }
   printf("\n");
   return 0;
}