第三题回文数 double fxr(double x, double r, double q) {     double sum = 0;     for(int i = 0; i <= q - 1; i++)         sum += ((ll)(floor(x / pow(2, r - i))) % 2 ) * pow(2, i);      return floor(x / pow(2, q)) * pow(2, q) + sum; } int main() {     double n;     cin >> n;     // cout << (2.0/9.0)*n*n << ' ' << (1.0/4.0)*(n+1.0)*(n+1.0) << endl;     double p = 1.0 + 2.0 * floor((n - 1.0) / 2.0);     double m = floor( log(p) / log(2.0) );     double q = floor( (m + 1.0) / 2.0 );     double s = floor( log(p - pow(2, q)) / log(2.0) );     double sum = 0;      double an = fxr(p, m, q);      if(an <= n) ;      else an = fxr(p - pow(2, q), s, q);      double p2 = an;      double m2 = floor(log(p2) / log(2.0));      double sum2 = 0;      for(int k = 1; k <= floor(m / 2.0); k++)          sum2 += (((ll)(floor(p2 / pow(2, k))) % 2) / pow(2, k));      double ans = ((5.0 - pow(-1.0, m2))/ 2.0 + sum2) * pow(2, floor(m / 2.0));      cout << ((ll)ans) << endl; }
点赞 2

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务