thinkphp 门户网站经典软文案例
thinkphp 门户网站,经典软文案例,南通网站优化,服务器下载安装这题主题是位运算#xff0c;我有些迷惑#xff0c;因为我貌似没用到相关知识。#include stdio.h
#include math.hint main() {int n;// Re数组#xff1a;存储二进制全1的数#xff08;即2^k - 1#xff09;#xff0c;Re[i] 对应 i 位全1二…这题主题是位运算我有些迷惑因为我貌似没用到相关知识。#include stdio.h #include math.h int main() { int n; // Re数组存储二进制全1的数即2^k - 1Re[i] 对应 i 位全1二进制数如 Re[3]7111? long long Re[67] {0}; // Be数组存储所有美丽数 long long Be[3000] {0}; Re[1] 1; // cnt 用于生成全1数初始为2对应2^1 long long cnt 2; // 生成所有全1二进制数 for (int i 2; i 67; i) { // Re[i] 2^i - 1 Re[i] Re[i-1] cnt; // cnt 乘2为下一位做准备 cnt * 2; // 超过1e18就停止避免溢出 if (Re[i] 1e18) break; } // count记录美丽数的总个数 long long count 1; // now初始为1对应2^0用于生成在全1数中插入0的偏移量 long long now 1; // 遍历所有位数从2位到67位因为1e18最多60位二进制 // 生成所有不超过1e18的美丽数存入Be数组 for (int i 2; i 67; i) { // cnt 初始为当前now用于生成把某一位1变成0的偏移量 cnt now; // 在i位全1数中依次把第1到第i-1位的1变成0得到美丽数 for (int j 1; j i; j) { // Be[count] i位全1数 - cnt即把第j位的1变成0 Be[count] Re[i] - cnt; // cnt 右移一位对应下一个要变成0的位 cnt / 2; // 美丽数总数1 count; // 超过1e18就停止避免溢出 if (Be[count-1] 1e18) break; } // now 乘2为下一位数的偏移量做准备 now * 2; // 超过1e18就停止 if (Be[count-1] 1e18) break; } scanf(%d, n); while (n--) { long long a, b; // 当前样例的美丽数计数每次处理新样例时重置为0 count 0; scanf(%lld %lld, a, b); // 遍历Be数组统计区间内的美丽数个数 for (int i 1;; i) { // 如果当前美丽数在区间内计数1 if (Be[i] a Be[i] b) { count; } // 如果当前美丽数超过b直接跳出循环Be数组是升序排列后续数更大 if (Be[i] b) break; } printf(%lld\n, count); } return 0; }