标签:题目 进制 JZOJ int len binray 二进制 n2 seat
1080-- 【基础】 挑战赛第三题——二进制中的1
传送门http://www.jzoj.cn/problem.php?id=1080
题目描述
给定一个正整数N,请找出N转化为二进制后,其中所有1的位置。二进制的最低位(最右侧)为第0位。
输入
输入中包含一个正整数N ( 1 <= N <= 1000000)
输出
输出N转换为二进制后,所有1的位置,每行一个1的位置
样例
输入
13
输出
0
2
3
解析
本道题依然可以偷懒 (yeah,这道题仍然是基于第一道题十进制转二进制的!只不过我们需要求每个1的个数
我们把前面的代码先写掉,把输出二进制部分删掉,在前面定义一个叫seat的变量用于确定1的位置,转二进制循环中判断是否为1,如果是输出seat,最后把seat+1
不过,还有一种
注意了,在for计数循环中我们定义了一个i,所以大可不必在写一个seat变量,不过要注意一点,我写的循环i一开始是1,输出的时候要减1。原因是因为我喜欢从1而不是0开始,如果从0开始可以直接输出i了
代码
一:
#include <bits/stdc++.h>
using namespace std;
int n,n2,binray_len,ans = 0,seat = 0;
int main()
{
cin >> n;
n2 = n;
while (n2){
n2 /= 2;
binray_len++;
}
int binray[binray_len+1];
// cout << binray_len << endl;
for (int i = 1; i <= binray_len; i++){
binray[i] = n % 2;
if (binray[i] == 1) cout << seat << endl;
n /= 2;
seat++;
}
return 0;
}
二:
#include <bits/stdc++.h>
using namespace std;
int n,n2,binray_len,ans = 0;
int main()
{
cin >> n;
n2 = n;
while (n2){
n2 /= 2;
binray_len++;
}
int binray[binray_len];
// cout << binray_len << endl;
for (int i = 0; i <= binray_len; i++){ // 如果是1记得把数组项数增加1,否则会越界
binray[i] = n % 2;
if (binray[i] == 1) cout << i << endl;
n /= 2;
}
return 0;
}
标签:题目,进制,JZOJ,int,len,binray,二进制,n2,seat 来源: https://blog.csdn.net/weixin_44186414/article/details/120400344
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。