Code tìm số chính phương bị lỗi

Em chạy đúng các so khác nhưng đến số 25 không được ạ…vd:số 0,1,16,36

http://codepad.org/iYGHpKrn

#include<iostream>
#include<math.h>
using namespace std;
/*
4. Kiểm tra 1 số nguyên dương x có phải là số chính phương hay không ?

Định nghĩa số chính phương: Là số mà kết quả khai căn bậc 2 của nó
là 1 số nguyên. vd: 0, 1, 4, 9, 16, 25, 36
*/
int main()
{
    int x;
    cout<<"\n nhap x: ";
    cin>>x;
    int t=sqrt(x);
    cout<< t<<endl;
      //cout<<" x ="<<x<<" pow ="<<pow(t,2);

    if(x==pow(t,2))
    {

        cout<<"\n so "<<x<<" la so chinh phuong";
    }

    return 0;
}

Bởi vì bạn dùng pow :slight_smile: nó tính không chính xác đâu (phép toán số thực), chắc là 24.99… gì đó. Còn nhân hai số nguyên là không có lẻ.

Vả lại, x sẽ bị đổi thành số thực, mà so sánh số thực không nên dùng == vì nó không chính xác.

1 Like

hàm pow(), sqrt() là hàm trả về giá trị double
double pow(double x, double y)
double sqrt(double x)
nên bạn ép kiểu khi dùng, hoặc khai báo biến dưới dạng double.

1 Like

Em nghịch ngợm tý , bác đừng chê cười

Code

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