判斷兩個數的和是否溢出
k=64時單獨考慮
[cpp]
# include <stdio.h>
# include <math.h>
int main()
{
int k;
__int64 a,b,c,d;
while(scanf("%d",&k)!=EOF)
{
scanf("%I64d%I64d",&a,&b);
c=(__int64)(pow(2,k-1)+0.001)-1;
d=(-1)*(__int64)(pow(2,k)+0.001);
if((a<0&&b>0)||(a>0&&b<0))
{
puts("WaHaHa");
continue;
}
if(k==64)
{
if(a>0&&b>0&&c-a<b)
printf("Yes\n");
else if(a<0&&b<0&&d-a>b)
printf("Yes\n");
else printf("WaHaHa\n");
continue;
}
if(a>0&&c-a<b)
printf("Yes\n");
else if (a<0&&d-a>=b)
printf("Yes\n");
else
printf("WaHaHa\n");
}
return 0;
}
# include <stdio.h>
# include <math.h>
int main()
{
int k;
__int64 a,b,c,d;
while(scanf("%d",&k)!=EOF)
{
scanf("%I64d%I64d",&a,&b);
c=(__int64)(pow(2,k-1)+0.001)-1;
d=(-1)*(__int64)(pow(2,k)+0.001);
if((a<0&&b>0)||(a>0&&b<0))
{
puts("WaHaHa");
continue;
}
if(k==64)
{
if(a>0&&b>0&&c-a<b)
printf("Yes\n");
else if(a<0&&b<0&&d-a>b)
printf("Yes\n");
else printf("WaHaHa\n");
continue;
}
if(a>0&&c-a<b)
printf("Yes\n");
else if (a<0&&d-a>=b)
printf("Yes\n");
else
printf("WaHaHa\n");
}
return 0;
}
判斷兩個數和的位元
[cpp]
#include<stdio.h>
#include<string.h>
__int64 a[70],b[70];
int main()
{
__int64 d,c;
int num,k,i,flag,j;
while(scanf("%d",&k)!=-1)
{
flag=0;
scanf("%I64d%I64d",&c,&d);
num=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
if((c<0&&d>0)||(c>0&&d<0))
{
puts("WaHaHa");
continue;
}
if(c<0&&d<0)
{c=-c;d=-d;flag=1;}
while(c)
{
a[num++]=c%2;
c=c/2;
}
num=0;
while(d)
{
a[num]+=d%2;
num++;
d/=2;
}
for(i=0;i<68;i++)
{
a[i+1]+=a[i]/2;
a[i]=a[i]%2;
}
for(i=68;i>=0;i--)
if(a[i]!=0)break;
if(i==k-1&&flag==1)
{
for(j=i-1;j>=0;j--)
if(a[j]!=0)break;
}
if(i<k-1)puts("WaHaHa");
else if(i==k-1&&flag==1&&j<0)
puts("WaHaHa");
else puts("Yes");
}
return 0;
}
#include<stdio.h>
#include<string.h>
__int64 a[70],b[70];
int main()
{
__int64 d,c;
int num,k,i,flag,j;
while(scanf("%d",&k)!=-1)
{
flag=0;
scanf("%I64d%I64d",&c,&d);
num=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
if((c<0&&d>0)||(c>0&&d<0))
{
puts("WaHaHa");
continue;
}
if(c<0&&d<0)
{c=-c;d=-d;flag=1;}
while(c)
{
a[num++]=c%2;
c=c/2;
}
num=0;
while(d)
{
a[num]+=d%2;
num++;
d/=2;
}
for(i=0;i<68;i++)
{
a[i+1]+=a[i]/2;
a[i]=a[i]%2;
}
for(i=68;i>=0;i--)
if(a[i]!=0)break;
if(i==k-1&&flag==1)
{
for(j=i-1;j>=0;j--)
if(a[j]!=0)break;
}
if(i<k-1)puts("WaHaHa");
else if(i==k-1&&flag==1&&j<0)
puts("WaHaHa");
else puts("Yes");
}
return 0;
}