进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)

题单地址:题单中心-东方博宜OJ

这里以二进制转十进制为例(按位加权求和法)

1290. 二进制转换十进制

问题描述

请将一个 25 位以内的 2 进制正整数转换为 1010 进制!

输入

一个 25 位以内的二进制正整数。

输出

该数对应的十进制。

样例

输入

111111111111111111111111

输出

16777215

解析: 按位加权(2^n)求和法。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
	string s;
	int n = 0, ans = 1;
	cin >> s;
	for(int i = s.size()-1; i >= 0; i--){
		n += (s[i] - '0') * ans;
		ans *= 2;
	}
	cout << n;
	return 0;	
}

1292. 十六进制转十进制

问题描述

请将一个不超过10位的十六进制正整数转换为十进制整数。

输入

10位以内的十六进制正整数,如果该十六进制中有字母,字母用大写英文字母表示。

输出

该数对应的十进制整数。

样例

输入

2ECF

输出

11983

解析:按位加权(16^n)求和法。注意大于10~15要使用字母A~F表达。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
	string s;
	long long n = 0, ans = 1;
	cin >> s;
	for(int i = s.size()-1; i >= 0; i--){
		if(s[i] >= '0' && s[i] <= '9')n += (s[i] - '0') * ans;
		else if(s[i] >= 'A' && s[i] <= 'Z')n += ((s[i] - 'A') + 10) * ans;
		ans *= 16;
	}
	cout << n;
	return 0;	
} 

1291. 八进制转十进制

问题描述

请将一个 20 位以内的八进制数转换为十进制整数。

输入

20 位以内的八进制数。

输出

该数对应的十进制数。

样例

输入

77777777777777777777

输出

1152921504606846975

解析:按位加权(8^n)求和法。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
	string s;
	long long n = 0, ans = 1;
	cin >> s;
	for(int i = s.size()-1; i >= 0; i--){
		n += (s[i] - '0') * ans;
		ans *= 8;
	}
	cout << n;
	return 0;	
} 

1405. 小丽找潜在的素数

问题描述

小丽同学在编程中学到了二进制数的概念,她发现,有些二进制数,如果转为 10 进制,就是素数,小丽把这些数称为潜在的素数;比如 2 进制 1101011,转为 10 进制后为 107 ,就是素数。

请编程帮小丽找出,哪些二进制数转为 10 进制后,是素数,计算出这样的数有多少个?

输入

第一行是一个整数 n(10 ≤ n ≤ 100)。

接下来 n 行,每行是一个 30 位以内的 2 进制数

输出

一个整数代表所有转为 10 进制后是素数的 2 进制数的个数。

样例

输入

6

1010000

1011

1101001

10111

111

1101011

输出

4

解析:按位加权(2^n)求和法,将二进制转十进制,在判断是否为素数。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

bool prime(int x){
	if(x < 2)return 0;
	for(int i = 2; i <= sqrt(x); i++){
		if(x % i == 0)return 0;
	}
	return 1;
}

int main() {
	int n, sum = 0;
	cin >> n;
	while(n--){
		string s;
		int m = 0, ans = 1;
		cin >> s;
		for(int i = s.size()-1; i >= 0; i--){
			m += (s[i] - '0') * ans;
			ans *= 2;
		}
		if(prime(m))sum++;
	}
	cout << sum;
	return 0;	
} 
相关推荐
知无不研2 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
2501_906565122 小时前
数学之美探究
算法
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
C++ 老炮儿的技术栈4 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
leisoo80974 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
qz_Serene6 小时前
C++:类和对象(上)
开发语言·c++
luj_17686 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5557 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴7 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆7 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill