30/09/2018, 17:05
[Solved]Lỗi khi đặt nhiều phép toán pow trong điều kiện IF
Tình hình là 2 cách code này em không thấy có gì khác nhau cả mà sao một cách thiếu mất một nghiệm 407
Đây là bài tìm số có 3 chữ số sao cho số đó bằng tổng lập phương các chữ số.
Em cùng Code::Block 10.05 nhá
Cách 1: chạy ra
153 370 371
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
int a,b,c;
for (a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
if(pow(a,3)+pow(b,3)+pow(c,3)==100*a+10*b+c)
printf("
%d%d%d",a,b,c);
}
}
Cách 2: chạy ra
153 370 371 407
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
int a,b,c;
for (a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
int d=pow(a,3)+pow(b,3)+pow(c,3);
int e=100*a+10*b+c;
if(d==e)
printf("
%d%d%d",a,b,c);
}
}
Update:
Đã test cả 2 code trên trang https://ideone.com/YYNWK9 đều chạy ra đủ nghiệm, chắc phải xem lại thằng Code::Block
Bài liên quan
Ideone.com
Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.
thấy độ ưu tiên như nhau mà nhỉ
Em cũng chạy trên trang đó ,cả 2 code đều ra đủ nghiệm, nhưng chạy trên máy em thì lại thiếu 1 nghiệm quái thật
http://cdn.daynhauhoc.com//daynhauhoc.s3-ap-southeast-1.amazonaws.com/original/2X/2/2d6f46faef00cd8f99b7ce36f6cad00d5bfac150.png
đập máy đê, dối trá
Vẫn vậy ạ
Phép toán
pow
của bạn là dùng hàm với số thực nên sẽ có sai số:pow
Yesssssssssss. Hahahahh. Cuối cùng cũng hiểu, tks anh @Gio nhá
Em phát hiện ra một cái nữa là những bài kiểu này nên dùng
powf
, vì các biến đều là int thì sẽ không bị sai số nữaCó thể là khi ở các compiler khác thì có cơ chế làm tròn/đảm bảo độ chính xác nên không bị sai như code::block
Thêm một kinh nghiệm nữa là không nên dùng
==
hoặc là!=
giữa double và integer như ở trên