hdu2116: http://acm.hdu.edu.cn/showproblem.php?pid=2116
题意:输入k(2<=k<=64),再输入x,y(-2^(k-1)<=x,y<=2^(k-1)-1),判断x+y是否溢出(即是否超出[-2^(k-1),2^(k-1)-1])
解法:若直接相加可能溢出,所以用max-x>y和min-x<y来判断.
code:
#include<iostream>
#include<cstdio>
#include<cstdlib>
int main()
{
long long int x,y,max,min;
int k;
while(scanf("%d",&k)!=EOF)
{
scanf("%I64d%I64d",&x,&y);
if(k==64)
max=0x7fffffffffffffffLL ; //2^63-1
else
max=(1<< (k-1)) - 1 ; //2^(k-1)-1
min=-max-1; //-2^(k-1)
if(x<=0&&y>=0||x>=0&&y<=0)
printf("WaHaHa\n");
else if(x>0)
{
if(max-x>=y)
printf("WaHaHa\n");
else
printf("Yes\n");
}
else
{
if(min-x<=y)
printf("WaHaHa\n");
else
printf("Yes\n");
}
}
}
/*input:
32
100 100
output:
WaHaHa
*/