01/10/2018, 13:57

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]

rogp10 viết 16:02 ngày 01/10/2018

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 (!).

Đào Tuấn viết 15:57 ngày 01/10/2018

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

rogp10 viết 16:12 ngày 01/10/2018

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

Đào Tuấn viết 16:02 ngày 01/10/2018

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]

rogp10 viết 16:02 ngày 01/10/2018

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ì?

Đào Tuấn viết 16:01 ngày 01/10/2018

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ì

rogp10 viết 16:12 ngày 01/10/2018

Đừ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.

Bài liên quan
0