JZOJ 部分有关进制题目

好久不写了(真的不是懒马

1047:【入门】正整数N转换成一个二进制数

传送门JZOJ 部分有关进制题目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的个数

传送门JZOJ 部分有关进制题目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类代码写得稀巴烂

上一篇:C语言贪吃蛇


下一篇:修改IP和DNS的dos命令