[恢]hdu 2116
2011-12-25 18:26:30
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2116
题意:输入K和两个K位带符号二进制数,判断两个数的和有没有溢出。
mark:不要用两个数加起来判断溢出,要用max减去一个数,否则会出bug。另外不知道为啥要写小于号才能过,小于等于号不行。
代码:
# include <stdio.h>
long long a, b ;
int k ;
int test ()
{
long long max, min ;
if (k == 64) max = 0x7fffffffffffffffLL ;
else max = (1LL << (k-1)) - 1 ;
min = -max-1 ;
if (a == 0 || b == 0) return 0 ;
if (a > 0 && b < 0) return 0 ;
if (a < 0 && b > 0) return 0 ;
if (a > 0)
return (max-a) < b ;
//if(((a>0&&b>0)&&(max-a<b))||((a<0&&b<0)&&(-max-1-a>b)))cout<<"Yes"<<endl;
return (min-a) > b ;
}
int main ()
{
while (~scanf ("%d", &k))
{
scanf ("%I64d%I64d", &a, &b) ;
puts (test()?"Yes" : "WaHaHa") ;
}
return 0 ;
}