Tìm lỗi sai trong chương trình xuất số Armstrong trong khoảng từ 0 đến 9999

e mới học c++ nên còn gà nên nhờ mấy a giúp em tìm lỗi sai trong code của e với ạ

[code]#include <iostream>
#include <math.h>
using namespace std;

int a=0;

int dem (int n)
{
while (n!=0)
{
a++;
n/=10;
}
return a;
}
int tongso (int n)
{
int tg;
int s=0;
while (n!=0)
{
tg = n%10;
s += pow(tg,a);
n/=10;
}
return s;
}
int main ()
{
for (int i=0;i<10000;i++)
{
dem(i);
if (tongso(i)==i)
{
cout<<i<<" ";
}
}

return 0;

}[/code]

Bài này mình sửa mấy bữa rồi, dùng pow là không đúng.

Ngoài ra thớt còn sử dụng biến toàn cục (!).

1 Like

rõ hơn đi bác
mới học nên kinh nghiệm chưa nhiều

Thứ nhất, pow là hàm cho số thực, nên tính toán sẽ không chính xác, và tính toán số nguyên sai một tí cũng không được.
Thứ hai, dùng biến toàn cục rất nguy hiểm vì không thể kiểm soát nổi truy cập vào đó => tìm lỗi rất khó, lên 500 dòng code thôi đã là muốn xỉu rồi. Bạn đã trả về rồi thì còn dùng biến toàn cục làm gì? Lỗi nằm ở đó.

Nếu bạn duyệt từ 0 lên thì chắc bạn đã biết mấy chữ số rồi, cần gì phải gọi hàm :sweat_smile:

1 Like

k xài pow thì bác tính xài cái gì để tính
e tìm được lỗi sai rồi
k xài pow thì bác có code nào hay k cho e tham khảo với

[code]#include
#include <math.h>
using namespace std;

int b=0;
int dem (int n)
{
int a=0;
while (n!=0)
{
a++;
n/=10;
}
b=a;
return b;
}
int tongso (int n)
{
int tg;
int s=0;
while (n!=0)
{
tg = n%10;
s += pow(tg,b);
n/=10;
}
return s;
}
int main ()
{
int n=0;
cout<<"\nSo amstrong trong khoảng 0 ~ 9999 là: “;
while (n<=9999)
{
dem(n);
if (tongso(n)==n)
{
cout<<n<<” ";
n++;
}
else n++;
}

return 0;

}

[/code]

Tính bằng pow() sẽ bị sai. Code thì không khó, nhưng bạn hãy trả lời câu hỏi này: x^n nghĩa là gì?

1 Like

Code kia của e xuất ra đúng số amstrong thì pow nó sai ở đâu
Bác k xài pow thì bác thay cái lỹ thừa đó bằng gì

Đừng bao giờ nghĩ kiểu giờ thấy code chạy đúng là lúc nào cũng đúng. In ra số Armstrong. Em không biết tại sao nó vẫn in ra số 75. Số thực rắc rối lắm, bài này dùng phép tính số nguyên là đủ.
Nhưng đây là bài tập của bạn mà, tôi đã gợi ý đến đấy rồi.

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