[恢]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 ;
}



posted @ 2012-01-06 23:42  Seraph2012  阅读(142)  评论(0编辑  收藏  举报