阿姆斯特朗数字打印错误

Armstrong Number Print Error

本文关键字:错误 打印 数字 阿姆斯特朗      更新时间:2023-10-16

我正在尝试在C 中编写一个函数,该功能识别并打印了从一个用户指定的范围内的Armstrong号码。它还返回有多少个整数。它将阅读的最大数字是9,999。

我遇到的问题是,它识别出每个阿姆斯特朗的数字,最多是8208,但不是9474,它们都是阿姆斯特朗的数字。当我根据它们的数字数量处理数字时,这给我带来了极大的混乱,因此,如果成功识别8208,它也应该识别9474。

这是我的代码:

int isArmstrongNum(int range){
    int count = 0;
    int ones;
    int tens;
    int hundreds;
    int thousands;
    if(range < 1 || range > 9999){
        cout << "invalid entry" << endl;
        return 0;
    }
    for(int i = 1; i < range; i++){
        if(i < 10){
            if(pow(i, 1) == i){
                count++;
                cout << i << endl;
            }
        }
        else if(i > 9 && i < 100){
            ones = i % 10;
            tens = (i - ones) / 10;
            if(pow(ones,2) + pow(tens,2) == i){
                count++;
                cout << i << endl;
            }
        }
        else if(i > 99 && i < 1000){
            ones = i % 10;
            tens = ((i % 100) - ones) / 10;
            hundreds = (i - tens * 10 - ones) / 100;
            if(pow(ones,3) + pow(tens, 3) + pow(hundreds,3) == i){
                count++;
                cout << i << endl;
            }
        }
        else if(i > 999 && i < 10000){
            ones = i % 10;
            tens = ((i % 100) - ones) / 10;
            hundreds = ((i % 1000) - tens*10 - ones) / 100;
            thousands = (i - hundreds * 100 - tens * 10 - ones) / 1000;
            if(pow(ones,4) + pow(tens, 4) + pow(hundreds, 4) + 
pow(thousands, 4) == i){
                count++;
                cout << i << endl;
            }
        }
    }
    return count;

}

任何想法为什么它是这种行为?谢谢。

希望这会有所帮助!

#include <iostream> 
#include <cmath>
using namespace std;
bool is_armstrong(int number)
{
    int length=0,n=number,temp=0;
    while(n>0)
    {
        length++;
        n/=10;
    }
    n=number;
    while(n>0)
    {
        temp+=pow(n%10,length);
        n/=10;
    }
    if(temp==number)
        return true;
    return false;
}
int main() 
{
    int i,start_range=1,end_range=9999;
    for(i=start_range;i<=end_range;i++)
    {
        if(is_armstrong(i))
            cout<<i<<endl;
    }
    return 0;
}
Output:
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474