hdu 2116 Has the sum exceeded

判斷兩個數的和是否溢出

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

 

You May Also Like