30/09/2018, 16:12
Hỏi về xuất số chính phương bằng viết hàm trực tiếp
hàm xuất đúng khi cho n<5 chữ số, và xuất thiếu khi n> 5 chữ số…giúp em với các anh ơi.
#include <math.h>
#include <conio.h>
void inchinhphuong(long n) // đã sữa
{
long i=1; // đã sữa
for(i; i<n; i++)
{
float cp = sqrt((float)i);
long thucp = cp;
if(i == thucp*thucp)
printf("%d ",i); //đã sữa 2
}
}
void main()
{
long n; // đã sữa
printf("nhap vao n, 0<n<10 trieu:
");
scanf("%d",&n);
while(!(0<n && n<10000000))
{
printf("nhap lai n, 0<n<10 trieu:
");
scanf("%d",&n);
}
printf("so chinh phuong nho hon n la:
"); // đã sữa
inchinhphuong(n);
getch();
}
anh LTD, nguyên nhân là: ở đã sữa 2 // cũ là: printf("so chinh phuong la: %d ",i);dài quá nên cửa sổ không hiển thị hết các giá trị được xuất ra, và đã sữa kiểu int thành long để để không gian cho n
Bài liên quan
Đã sửa một số lỗi cú pháp, chương trình của em bị lỗi gì em phải nói rõ ra chứ?
Vì n nhập vào có thể lên tới 10.000.000 trong khi kiểu int chỉ lưu từ -32.768<=n<32.768 nên khi nhập số lớn hơn nó sẽ bị sai. Bạn nên thay thành kiểu long để lưu trữ số |n| <=1.000.000.000
Theo mình nên chạy biến i và in ra luôn. Vì i chạy tư 1-> sqrt(n) nên nhanh hơn.
http://ideone.com/bf0KM5
// đã sữa nhưng kết quả vẫn vậy anh à
lỗi ở chỗ, vd như e nhập n= 10000 thì xuất đúng số chính phương từ 1 đến 9801, nhưng n=100000 thì xuất từ 27889 đến 99856 chứ không xuất từ 1…á anh
sory mấy anh, em đã biết nguyên nhân
@dangtrantuananh13 sửa lại bài và cho biết nguyên nhân lên post 1 đi
Cách sửa bài
mà mình nghĩ 1 số chính phương thì i = nguyen*nguyen chứ , sao bạn lại để dạng float nhỉ ?
Đây là code của minh.Mình dựa trên ý tưởng số chính phương là những số có căn bậc hai là số nguyên kết hợp với ép kiểu.