现在的位置: 首页 > 综合 > 正文

hdu 2116 Has the sum exceeded

2019年01月01日 ⁄ 综合 ⁄ 共 1069字 ⁄ 字号 评论关闭

判断两个数的和是否溢出

k=64时单独考虑

 

# 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<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;
}

 

抱歉!评论已关闭.