您的位置:首页 > 其它

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

2014-07-07 21:20 423 查看
题目

大意:

求二进制的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: