题目:给你一个二进制串,判断能否被131071 整除。
分析:数论。直接模拟除法运算,求出余数即可。
说明:注意可能有非法字符(例如空格)。
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
char buf[10010],temp[110];
int main()
{
int count = 0,len = 0;
while (~scanf("%s",&temp)) {
len = strlen(temp);
count = 0;
while (temp[len-1] != '#') {
for (int i = 0 ; i < len ; ++ i)
if (temp[i] == '0' || temp[i] == '1')
buf[count ++] = temp[i];
scanf("%s",&temp);
len = strlen(temp);
}
for (int i = 0 ; i < len ; ++ i)
if (temp[i] == '0' || temp[i] == '1')
buf[count ++] = temp[i];
buf[count] = 0;
int r = 0;
for (int i = 0 ; i < count ; ++ i) {
r <<= 1;
r += buf[i]-'0';
r %= 131071;
}
if (r) printf("NO\n");
else printf("YES\n");
}
return 0;
}