1087 1 10 100 1000
1,10,100,1000…组成序列1101001000…,求这个序列的第N位是0还是1。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
Output
共T行,如果该位是0,输出0,如果该位是1,输出1。
Input示例
3
1
2
3
Output示例
1
1
0
题解:
跟之前做的hdu 1597那题差不多。先预处理出所有的长度,之后用lower_bound查找在哪个索引中,n与前一个长度想减可得在数组中的位置。判断是不是1输出即可。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn = 1e9+100;
LL len[50000];
int main()
{
len[0]=0;
int i;
for(i=1;len[i-1]+i<maxn;i++)
{
len[i]=len[i-1]+i;
}
int right=i;
int T;
cin>>T;
LL n;
while(T--)
{
cin>>n;
LL p = lower_bound(len+1,len+right,n)-len;
int len2 = n - len[p-1];
if(len2==1) cout<<1<<endl;
else cout<<0<<endl;
}
return 0;
}