If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.
Cái giải phương trình bậc hai này anh có thử, sai ở test 3 (wrong answered). Dự đoán là do A = 2^31-1 mà còn *8 lên xong căn ra chắc sai số nó lớn quá
Thì ra trong công thức này mình phải chú ý sử dụng long và đồng thời các số phải để ở dạng thập phân như thế này:
long double temp = (long double)(1.0+sqrt((long double)(8.0*t-7.0)))/2.0;
Thì ra trong công thức này mình phải chú ý sử dụng long và đồng thời các số phải để ở dạng thập phân như thế này:
long double temp = (long double)(1.0+sqrt((long double)(8.0*t-7.0)))/2.0;
Đã AC nhờ làm như vậy...
Chính xác hơn là đổi số 8 ra long double là đủ rồi, chắc nó quất cái số gì khủng lắm thật
pntruongan 1209. 1, 10, 100, 1000... C++ Accepted 0.14 448 KB
Trước hết là nhìn thấy [1][10][100][1000][....] có quy luật dạng n(n+1)/2 => ta cần tìm 1 con số n lớn nhất thỏa n(n+1)/2 < k => n^2 + n - 2k < 0 (với n max) => delta = 1^2 - 4 (1)(-2k) = 1 + 8 k => nghiệm là (-1 + sqrt(1 + 8k)) / 2 (không lấy nghiệm âm => không trừ delta được).
Ở đây nhận thấy: k <= 2^31 - 1 => giới hạn integer => 8 * k > giới hạn integer 32 bit=> phải dùng 1 thứ gì đó chứa được 8k như: double,long double, long long int (int64 bit)
======== nói chung mình chỉ viết tóm tắt lại những gì các bạn đã thảo luận thôi
Trước hết là nhìn thấy [1][10][100][1000][....] có quy luật dạng n(n+1)/2 => ta cần tìm 1 con số n lớn nhất thỏa n(n+1)/2 < k => n^2 + n - 2k < 0 (với n max) => delta = 1^2 - 4 (1)(-2k) = 1 + 8 k => nghiệm là (-1 + sqrt(1 + 8k)) / 2 (không lấy nghiệm âm => không trừ delta được).
Ở đây nhận thấy: k <= 2^31 - 1 => giới hạn integer => 8 * k > giới hạn integer 32 bit=> phải dùng 1 thứ gì đó chứa được 8k như: double,long double, long long int (int64 bit)
======== nói chung mình chỉ viết tóm tắt lại những gì các bạn đã thảo luận thôi
đây là đoạn lệnh của em... AC rồi hihi..khi nhập rồi xử đẹp nó luôn:
double temp;
cin >> temp;
temp = (sqrt(8*temp-7)-1)/2;
if (temp == (long)temp) cout << "1 "; else cout << "0 ";
======>vừa nhập vừa knockout nó luôn.
Comment