In ra số Armstrong. Em không biết tại sao nó vẫn in ra số 75

#include <iostream>
#include <math.h>

using namespace std;

int Armstrong(int n)
{
    int SoChuSo = log10(n) + 1;
    int s = n;
    while (n != 0)
    {
        int i = n % 10;
        s -= pow((float) i, SoChuSo);
        n /= 10;
    }
    if (s == n) return 1; else return 0;
}

void DemA(int n)
{
    for (int i = 1; i <= n; i++)
        if (Armstrong(i)) cout << i << endl;
}

int main()
{
    int n;
    cin >> n;
    DemA(n);
    return 0;
}

Hàm pow là hàm số thực nên tính toán sẽ không chính xác. (để ý 7^2 + 5^2 = 74)

Dùng Code::Blocks mà chọn GCM là dính ngay bug này & nhiều bug nữa.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?