01/10/2018, 16:27

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<<"
 nhap x: ";
    cin>>x;
    int t=sqrt(x);
    cout<< t<<endl;
      //cout<<" x ="<<x<<" pow ="<<pow(t,2);

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

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

    return 0;
}
rogp10 viết 18:30 ngày 01/10/2018

Bởi vì bạn dùng pow 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.

guo_da viết 18:34 ngày 01/10/2018

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.

Nguyễn Văn Vương viết 18:32 ngày 01/10/2018

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

Code

Bài liên quan
0