首页 > 代码库 > HDU 4588 Count The Carries(找规律,模拟)

HDU 4588 Count The Carries(找规律,模拟)

题目

 

大意:

求二进制的a加到b的进位数。

思路:

列出前几个2进制,找规律模拟。

 

 

#include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>#include <math.h>#include <stack>#include <vector>using namespace std;int main(){    int a,b,id;    __int64 ans,temp,len[63],aa,bb,cc,cc1,bb1;    len[0]=1;    for(int i=1;i<63;i++)        len[i]=len[i-1]*2;    while(scanf("%d%d",&a,&b)!=EOF)    {                id=0;        b++;a++;        ans=0;        temp=1;        while(temp)        {            temp=temp/2;            ans+=temp;            id++;            aa= b/len[id]*len[id-1] - a/len[id]*len[id-1];            bb=b%len[id], bb1 = a%len[id];            cc=len[id-1], cc1 = len[id-1];            if(bb<cc) bb=0,cc=0;            if(bb1<cc1) bb1=0,cc1=0;            temp=temp+aa+bb-cc-bb1+cc1;//原来是这里出了岔子,,,,唉            if(  (a-1 ) & len[id-1] )                temp++;        }        printf("%I64d\n",ans);    }    return 0;}
View Code