#include <cstdio> using namespace std; long long n; //数据是10^18,不开long long 见祖宗 int main() { scanf("%lld", &n); while(n > 0) { printf("%lld ", n); n = n >> 1; //右移比直接除快点 } return 0; }
右移是什么意思
编译器存数字是用二进制存的,比如十进制17用二进制就是10001,n >> 1的意思就是二进制数向右移一位,移动之后变成01000,也就是十进制的8,等同于 17 / 2 = 8。
编译器存数字是用二进制存的,比如十进制17用二进制就是10001,n >> 1的意思就是二进制数向右移一位,移动之后变成01000,也就是十进制的8,等同于 17 / 2 = 8。