Hỏi về giá trị trả về trong đoạn code

cho em hỏi sao input của:8000000 mà output của em tận 1283340188 thế ạ :frowning:
Em xin cảm ơn ạ.

#include <iostream>
#include "THUE.h"

using namespace std;

unsigned __int64 Tinhthue(unsigned int thunhap) {
	int tax=0;
	if (thunhap < 4000000);
	if (4000000 < thunhap <= 6000000) {
		tax = (thunhap - 4000000) * 0.05;
	}
	if (6000000 < thunhap <= 9000000) {
		tax = 100000 + (thunhap - 6000000) * 0.1;
	}
	if (9000000 < thunhap <= 14000000) {
		tax = 100000 + 300000 + (thunhap - 9000000) * 0.15;
	}
	if (14000000 < thunhap <= 24000000){		
		tax = 100000 + 300000 + 750000 + (thunhap - 14000000) * 0.2;
	}
	if (24000000 < thunhap <= 44000000){
		tax = 100000 + 300000 + 750000 + 2000000 + (thunhap - 24000000) * 0.25;
	}
	if (44000000 < thunhap <= 84000000){
		tax = 100000 + 300000 + 750000 + 2000000 + 2500000 + (thunhap - 44000000) * 0.3; 
	}
	if (thunhap > 84000000){
		tax = 100000 + 300000 + 750000 + 2000000 + 2500000 + 12000000 + (thunhap - 84000000) * 0.35; 
	}
	return tax;
}

Ở c/c++ ko sánh được như vậy đâu nha (ngôn ngữ khác có thể sẽ báo lỗi).
Ví dụ input của bạn là 8000000 thì 4000000 < thunhap <= 9000000 thì nó sẽ tính 4000000 < thunhap trước và trả kết quả true là 1 (với false là 0), tiếp theo nó lấy kết quả đó 1 <= 9000000 => true.
Để chinh xác bạn phải viết như sau 4000000 < thu nhap && thunhap <= 9000000.
Về phần bài tập dạng này tui thấy có bài ở đây khá hay cho bạn tham khảo Ý tưởng bài tập tính tiền điện (daynhauhoc.com)

5 Likes

Em cám ơn anh nhiều ạ,nhờ anh em sửa được r ạ.

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