好久不写了(真的不是懒马
1047:【入门】正整数N转换成一个二进制数
传送门http://www.jzoj.cn/problem.php?id=1047
懒得放题目
本题我们可以采用小学就学过的除二取余法
将十进制数除以二,得到的商继续除以二,直至商为0或1时为止,然后在旁边标出各步的余数,最后倒过来数
#include <bits/stdc++.h>
using namespace std;
int n,n2,binray_len; // 定义n,n的替身,二进制的长度
int main()
{
cin >> n; // 读入n
n2 = n;
while (n2){ // 用替身算出二进制数的长度
n2 /= 2;
binray_len++;
}
int binray[binray_len+1]; // 定义数组binray为二进制数
for (int i = 1; i <= binray_len; i++){ // 小学就学过的转换方法 模2 判断 除2
binray[i] = n % 2;
n /= 2;
}
for (int i = binray_len; i >= 1; i--){ // 因为最后需要倒着输出,所以需要重新来个循环输出
cout << binray[i];
}
return 0; // 结束
}
1557: 【入门】二进制中1的个数
传送门http://www.jzoj.cn/problem.php?id=1557这一题就是基于上一题要输出1的个数
所以我们可以偷懒 哦耶!!(
把上题的代码复制过来,添上ans变量,在for循环加一个if判断是否等于1,最后把输出数组给改成输出ans就完事了
代码
#include <bits/stdc++.h>
using namespace std;
int n,n2,binray_len,ans = 0; // n, n的替身, 二进制数的长度,答案
int main()
{
cin >> n; // 读入n
n2 = n;
while (n2){ // 循环大家看得懂吧,先算出数的长度
n2 /= 2;
binray_len++;
}
int binray[binray_len+1]; // 定义数组binray
for (int i = 1; i <= binray_len; i++){ // 小学就学过的转换方法 模2 判断 除2
binray[i] = n % 2;
if (binray[i] == 1) ans++;
n /= 2;
}
cout << ans; // 输出
return 0; // 结束
}
今天先写这两题,下次有时间写A类B类
主要是我A类B类代码写得稀巴烂