Como a ojo no se veÃa ningún error, he probado y ha sido tal y como pensaba, problemas con los reales. Haces muchas conversiones innecesarias y eso es jugar con fuego

Te pongo tu mismo código con unas cuantas modificaciones, asà obtiene los 100 puntos.
#include <iostream>
#include <vector>
using namespace std;
double angulo (string s) {
int n = s.size();
bool sortir = false;
int pos;
for (int i = n - 1; i >= 0 and not sortir; --i) {
if (s[i] == '1') sortir = true;
pos = i;
}
pos = n - pos;
return 90.0 - 180.0*double(pos-1)/double(n - 1);
}
string transformar(string s) {
long int n = 0;
int k = s.size();
long int deu = 1;
for (int i = k - 1; i >= 0; --i) {n += (s[i] - '0')*deu;deu *= 10;}
int i = 0;
vector <char> n2(1000000);
for (;n>0;n/=2) {
n2[i] = (n%2)+'0';
++i;
}
string s2(i,'0');
for (int j = i - 1; j >= 0; --j) s2[j] = n2[i - 1 - j];
return s2;
}
int main() {
int y;
cin >> y;
string x;
while (y > 0) {
cin >> x;
if (x[0] == '1' and x.size() == 10) cout << int (angulo(x)) << endl;
else cout << int (angulo(transformar(x))) << endl;
--y;
}
}