问题描述:有一个序列,序列的第一个数是n,后面的每个数均是前一个数整除2的结果,请输出这个序列中值为正数的所有项。
输入格式:输入一行,包含一个整数n。
输出格式:输出一行,包含多个整数,相邻整数之间用一个空格隔开,表示答案。
分析:本题较为简单,每次对前一个数做除2运算即可,例外还可以按位运算实现!
补充:右移运算符(>>),把操作数的二进制码右移指定位数,左边空出来的位用原来的符号位填充。原来是负数的就填充1,原来是正数的就填充0,符号位不变。
注:按位移的是数的补码
C++程序:
#include<bits/stdc++.h>
using namespace std;
int main()
{long long n;cin>>n;while(n>0){cout<<n<<" ";n=n>>1;}return 0;
}
C语言:
#include<stdio.h>
int main()
{long long n;scanf("%d", &n);while (n > 0){printf("%d ", n);n = n / 2;}return 0;
}