【NOI-题解】1108 - 正整数N转换成一个二进制数1290 - 二进制转换十进制1386 - 小丽找半个回文数1405 - 小丽找潜在的素数?

文章目录

  • 一、前言
  • 二、问题
    • 问题:1108 - 正整数N转换成一个二进制数
    • 问题:1290 - 二进制转换十进制
    • 问题:1386 - 小丽找半个回文数
    • 问题:1405 - 小丽找潜在的素数?
  • 三、感谢

一、前言

本章节主要对进制转换的题目进行讲解,包括《1108 - 正整数N转换成一个二进制数》《1290 - 二进制转换十进制》《1386 - 小丽找半个回文数》《1386 - 小丽找半个回文数》题目。

二、问题

问题:1108 - 正整数N转换成一个二进制数

类型:进制转换


题目描述:

输入一个不大于 32767 的整数 n ,将它转换成一个二进制数。

输入:

输入只有一行,包括一个整数 (0 ≤ n ≤ 32767)。

输出:

输出只有一行。

样例1:

输入:

100

输出:

1100100

样例2:

输入:

0

输出:

0

在这里插入图片描述


1.分析问题

  1. 已知:一个不大于 32767 的整数 n。
  2. 未知:将它转换成一个二进制数。
  3. 关系:进制转换

2.定义变量

  • n; 用于存储待转换的整数。
  • v; 用于存储转换后的二进制位,每个元素代表一位,0 或 1。
	//二、定义变量(已知、未知、关系) 
	int n;
	vector<int> v; 

3.输入数据

  • 从标准输入读取一个整数。
	//三、输入已知
	cin>>n;

4.数据计算

  • 使用while(n)循环,当n不为0时执行循环体。
  • 取n的当前最低位(n % 2),将其添加到vector的末尾。
  • 将n右移一位,相当于除以2并向下取整,继续处理下一位。
//四、根据关系计算
	while(n){
		v.push_back(n%2);
		n/=2;
	}
	

5.输出结果

  • 在转换完成后,先检查vector是否为空。若为空,则直接输出0。
  • 否则,从vector的末尾开始遍历到开头,逐个输出vector中的元素,即得到了该整数的二进制表示。
//五、输出未知 
	if(v.empty()){
		cout<<0;
	}else{
		for(int i=v.size()-1;i>=0;i--){
			cout<<v[i];
		}
	}
	
	
	return 0;

完整代码如下:

#include<bits/stdc++.h> // 包含通用头文件,提供所有常用的标准库功能
using namespace std;    // 使用标准命名空间std,简化代码中的库函数调用

int main() {            // 程序入口点
    // 一、分析问题
    // 目标:将一个不大于32767的十进制整数转换为二进制表示
    
    // 二、定义变量
    int n;               // 存储用户输入的整数
    vector<int> v;       // 使用vector来存储整数的二进制位,每个元素代表一位(0或1)

    // 三、输入
    cin >> n;            // 从标准输入读取一个整数n

    // 四、转换过程
    while(n) {           // 当n非零时执行循环
        v.push_back(n % 2); // 取n的当前最低位(n除以2的余数),加入到vector末尾
        n /= 2;           // n右移一位,即n除以2并向下取整,继续处理下一位
    }

    // 五、输出
    // 检查vector是否为空(理论上这里可以直接输出"0",因为当n为0时,循环不会执行,直接进入此逻辑)
    if(v.empty()) {
        cout << 0;       // 如果vector为空(即输入的n为0),直接输出"0"
    } else {
        // 遍历vector,从最后一个元素开始向前遍历,输出二进制位
        for(int i = v.size() - 1; i >= 0; i--) {
            cout << v[i]; // 输出当前位
        }
    }

    // 结束程序
    return 0;            // 主函数正常结束,返回0
}

问题:1290 - 二进制转换十进制

类型:进制转换、字符串


题目描述:

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

输入:

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

输出:

该数对应的十进制。

样例:

输入:

111111111111111111111111

输出:

16777215

在这里插入图片描述


1.分析问题

  1. 已知:一个 25 位以内的 2 进制正整数;
  2. 未知:转换为 10 进制;
  3. 关系:二进制转十进制。

2.定义变量

  • s 用于存储输入的二进制。
  • res 初始化结果变量,用于存放转换后的十进制数值。
	//二、定义变量(已知、未知、关系)
	string s;
	int res=0; 

3.输入数据

  • 从标准输入读取一个二进制字符串。
	//三、输入已知
	cin>>s;

4.数据计算

  • 使用一个循环遍历输入字符串s的每一个字符(从末位到首位)。
  • 初始化一个变量t用于记录当前位的权重,初始为1(即2^0)。
  • 将当前字符(‘0’或’1’)减去字符’0’得到其对应的整数值(0或1),然后乘以当前位的权重t,累加到结果res中。
  • 在每次迭代后,将权重t乘以2,以便处理下一位的二进制位。
	//四、根据关系计算
	int t=1;
	for(int i=s.size()-1;i>=0;i--){
		res+=(s[i]-'0')*t;
		t*=2;
	}

5.输出结果

  • 输出转换后的十进制数值。
//五、输出未知 
	cout<<res;

完整代码如下:

#include <bits/stdc++.h> // 包含头文件,提供了所有常用的标准库功能
using namespace std;    // 使用标准命名空间std,简化代码中的库函数调用

int main() {            // 程序入口点
    // 一、问题分析
    // 已知条件:一个长度不超过25位的二进制正整数
    // 目标:将此二进制数转换为十进制数
    
    // 二、变量定义
    string s;           // 存储二进制字符串
    int res = 0;        // 初始化转换结果为0

    // 三、输入二进制
    cin >> s;           // 从标准输入读取一个二进制

    // 四、二进制转十进制计算
    int t = 1;          // 初始化当前位的权重为2^0 = 1
    for(int i = s.size() - 1; i >= 0; i--) { // 从字符串末位开始遍历到首部
        // 将字符数字('0'或'1')转换为其对应的整数值(0或1),然后乘以其权重t,累加到res中
        res += (s[i] - '0') * t;
        
        // 每处理完一位,权重t翻倍,相当于下一位的权重(2^n)
        t *= 2;
    }

    // 五、输出十进制结果
    cout << res;         // 输出转换得到的十进制数

    return 0;            // 主函数正常结束,返回0
}

问题:1386 - 小丽找半个回文数

类型:进制转换


题目描述:

小丽同学在编程中学到了回文数的概念,如果一个数正过来读和反过来读是同一个数,那么这个数就是回文数;比如:2、5、8、66、121、686、12321 都是回文数,小丽发现,这样的数不算多。

于是小丽有个想法,如果这个数不是回文数,但这个数在 2 进制或者 16 进制下是回文数,就算这个整数是半个回文数,比如 417 并不是回文,但 417 对应的 16 进制数是 1A1 是回文数,因此 417 算半个回文数。

请你编程帮助小丽找符合条件的半个回文数。

输入:

第一行是一个整数 n(5≤n≤100); 第二行是 n 个整数(这些整数都是 [0,10^8] 之间的整数);

输出:

所有符合条件的半个回文数,每行一个。

样例:

输入:

5
121 417 27 100 21

输出:

417
27
21

在这里插入图片描述


1.分析问题

  1. 已知:n个整数;
  2. 未知:找符合条件的半个回文数。
  3. 关系:这个数不是回文数,但这个数在 2 进制或者 16 进制下是回文数,就算这个整数是半个回文数

2.定义变量

	int n;
	string s,binary,hexa;

3.输入数据

  • 程序接收用户输入的整数数量n。
	//三、输入已知
	cin>>n;
  • 随后,对于每一个输入的整数s,程序先检查它是否为回文数,如果是则跳过(因为它不符合“半个回文数”的定义)。
	for(int i=0;i<n;i++){
		cin>>s;
	}
  • 接着,将s分别转换为二进制和十六进制形式,并检查这两种形式是否为回文。只要其中任一是回文,就输出原始的整数s。
		if(checkHW(s)) continue;
		//四、根据关系计算
		binary=decbin(s);
		hexa=dechex(s);
		//五、输出未知 
		if(checkHW(binary)||checkHW(hexa)){
			cout<<s<<endl;
		}

4.数据计算

  • 此函数通过创建字符串的逆序副本并比较两者是否相等来判断给定字符串是否为回文。
bool checkHW(string t){
	string re=t;
	reverse(re.begin(),re.end());
	return t==re;
}
  • 将输入的十进制字符串转换为二进制。
string decbin(string dec){
	int ndec=0,t;
	char c;
	string bin;
	for(int i=0;i<dec.size();i++){
		ndec=ndec*10+(dec[i]-'0');
	}
	while(ndec){
		t=ndec%2;
		c=t+'0';
		bin=c+bin;
		ndec/=2;
	}
	return bin;
}
  • 将输入的十进制字符串转换为十六进制字符串

string dechex(string  dec){
	int ndec=0,t;
	char c;
	string hex;
	
	for(int i=0;i<dec.size();i++){
		ndec=ndec*10+(dec[i]-'0');
	}
	
	while(ndec){
		t=ndec%16;
		if(t<=9){
			c=t+'0';
		}else{
			c=t-10+'A';
		}
		
		hex=c+hex;
		ndec/=16;
	}
	
	return hex;
}

5.输出结果

//五、输出未知 
		if(checkHW(binary)||checkHW(hexa)){
			cout<<s<<endl;
		}

完整代码如下:

#include<bits/stdc++.h> // 包含常用头文件,简化代码,但非标准,建议具体指定所需头文件
using namespace std; // 使用std命名空间,允许直接使用std内的函数和对象,但可能引起命名冲突

// 检查字符串是否为回文
bool checkHW(string t){
    string re = t; // 复制字符串t
    reverse(re.begin(), re.end()); // 反转字符串
    return t == re; // 比较原字符串与反转后的字符串是否相等
}

// 十进制字符串转二进制字符串
string decbin(string dec){
    int ndec = 0; // 初始化十进制数值
    for(int i=0; i<dec.size(); i++){ // 遍历输入字符串
        ndec = ndec * 10 + (dec[i] - '0'); // 将字符数字转换为整数并累加
    }
    
    string bin; // 初始化二进制字符串
    while(ndec){ // 当十进制数不为0时
        bin = (ndec % 2 ? '1' : '0') + bin; // 将余数添加到二进制字符串前部
        ndec /= 2; // 整除2进行下一轮
    }
    return bin; // 返回二进制字符串
}

// 十进制字符串转十六进制字符串
string dechex(string dec){
    int ndec = 0; // 初始化十进制数值
    for(int i=0; i<dec.size(); i++){ // 遍历输入字符串
        ndec = ndec * 10 + (dec[i] - '0'); // 将字符数字转换为整数并累加
    }
    
    string hex; // 初始化十六进制字符串
    const char* digits = "0123456789ABCDEF"; // 十六进制字符表
    while(ndec){ // 当十进制数不为0时
        hex = digits[ndec % 16] + hex; // 添加对应的十六进制字符到字符串前部
        ndec /= 16; // 整除16进行下一轮
    }
    return hex; // 返回十六进制字符串
}

int main(){
    // 主函数开始
    int n; // 定义整数n存储输入的整数数量
    cin >> n; // 读取整数n
    
    for(int i=0; i<n; i++){ // 循环处理n个整数
        string s; // 存储当前输入的整数字符串
        cin >> s; // 读取一个整数
        
        // 如果该整数本身就是回文,则跳过
        if(checkHW(s)) continue;
        
        // 转换并检查二进制和十六进制形式
        string binary = decbin(s); 
        string hexa = dechex(s);
        
        // 如果二进制或十六进制形式是回文,则输出原整数
        if(checkHW(binary) || checkHW(hexa)){
            cout << s << endl; // 输出整数
        }
    }
    
    // 主函数结束
    return 0; // 程序正常退出
}

问题:1405 - 小丽找潜在的素数?

类型:进制转换


题目描述:

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

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

输入:

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

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

输出:

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

样例:

输入:

6
1010000
1011
1101001
10111
111
1101011

输出:

4

在这里插入图片描述


1.分析问题

  1. 已知:n个 30 位以内的 2 进制数;

  2. 未知:输出所有转为 10 进制后是素数的 2 进制数的个数。

  3. 关系:进制转换。

2.定义变量

	//二、定义变量(已知、未知、关系)
	int n,c=0,t;
	string s; 

3.输入数据

  • 首先读取一个整数n,表示有n个二进制数需要处理。
  • 接下来进行n次循环,每次循环读取一个二进制字符串s。
	//三、输入已知
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s;
	}

4.数据计算

  • 将二进制字符串b转换为十进制整数。它从字符串的末尾开始遍历,累积每一位的值(通过减去字符’0’得到数字)并乘以当前的基数(初始为1,每次循环乘以2)。
int bindec(string b){
	int dec=0,q=1;
	
	for(int i=b.size()-1;i>=0;i--){
		dec+=(b[i]-'0')*q;
		q*=2;
	}
	
	return dec;
	
}

  • 判断一个整数p是否为素数。
bool isPrime(int p){
	if(p<=3) return p>1;
	
	for(int i=2;i*i<=p;i++){
		if(p%i==0) return false;
	}
	
	return true;
}
  • 调用bindec将其转换为十进制数t,再用isPrime判断t是否为素数。如果是,则计数器c加1。
	//四、根据关系计算
		t=bindec(s);
		if(isPrime(t)) ++c;

5.输出结果

  • 循环结束后,输出计数器c的值,即转换后是素数的二进制数的个数。
	//五、输出未知 
	cout<<c;

完整代码如下:

#include<bits/stdc++.h> // 包含所有常用头文件
using namespace std;    // 使用std命名空间,简化代码中标准库的使用

// 函数:将二进制字符串转换为十进制整数
int bindec(string b){
    int dec = 0, q = 1; // 初始化十进制数为0,权重为1(2的0次幂)
    for(int i = b.size() - 1; i >= 0; i--){ // 从字符串末尾开始遍历
        dec += (b[i] - '0') * q;           // 将当前位的二进制值加到十进制数上
        q *= 2;                             // 权重翻倍,对应二进制位的移动
    }
    return dec; // 返回转换后的十进制数
}

// 函数:判断一个整数是否为素数
bool isPrime(int p){
    if(p <= 3) return p > 1; // 处理p为1, 2, 3的情况,其中2和3是素数
    for(int i = 2; i * i <= p; i++){ 
        if(p % i == 0 ) return false; 
    }
    return true; // 所有可能的因子都检查过了,p是素数
}

int main(){
    // 主函数开始
    int n, count = 0; // n表示二进制数的个数,count用于统计素数的个数
    string binary;    // 用于存储输入的二进制字符串
    
    // 输入二进制数的个数n
    cin >> n;
    
    // 循环读取n个二进制数,并检查它们转换为十进制后是否为素数
    for(int i = 0; i < n; i++){
        cin >> binary; // 输入一个二进制数
        int decimal = bindec(binary); // 转换为十进制
        if(isPrime(decimal)) ++count; // 如果是素数,计数器加1
    }
    
    // 输出统计结果
    cout << count << endl; // 输出转换后为素数的二进制数的数量
    
    return 0; // 程序结束
}

三、感谢

如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。

每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/789200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

获超九成Gartner用户力推!FortiGate连续五年斩获“客户之选”称号

近日&#xff0c;Gartner Peer Insights™ 网络防火墙客户之选报告发布&#xff0c;Fortinet 连续第五年荣登这项权威榜单。该评选结果源于广大用户对 Fortinet 防火墙产品的真实反馈&#xff0c;是客户选择 Fortinet 的重要参考依据&#xff0c;也是FortiGate能够占据全球防火…

ArcGIS Pro入门制图教程

地理信息系统 (GIS) 是一种使用地图显示和分析数据的方式。在本教程中&#xff0c;您将学习桌面 GIS 应用程序 ArcGIS Pro 的基础知识。 新加坡的一家旅行社希望制作一款宣传册&#xff0c;用于向游客介绍距离市中心热门目的地最近的火车站。该宣传册将与带有文本信息的地图相…

CSRF靶场通关合集

目录 前言 CSRF漏洞总结 1.PiKachu靶场 1.1CSRF(get) 1.2 CSRF(post)请求 1.3 CSRF Token 2.DVWA靶场 难度低 难度中 难度高 前言 最近系统的将从web渗透到内网渗透的知识点做一个回顾,同时结合一些实战的案例来演示,下面是对刚开始学习时对靶场的一个总结. CSRF漏洞…

羊大师:暑期不“胖”秘籍:羊奶滋养,细嚼慢咽是关键!

夏日炎炎&#xff0c;假期悠长&#xff0c;如何在享受悠闲时光的同时&#xff0c;保持轻盈体态&#xff0c;成了许多人心中的小秘密。今天&#xff0c;就让我们一起揭秘暑期不“胖”的秘籍&#xff0c;让羊奶的滋养与细嚼慢咽的智慧&#xff0c;成为你美丽夏日的守护神。 羊奶轻…

[Java]Swing版坦克大战小游戏项目开发(1)——new出一个窗口

highlight: xcode theme: vuepress 前言 本系列文章带领 Java 初学者学习使用 Java 语言结合 Swing 技术以及设计模式开发一款经典小游戏——坦克大战。通过这个小游戏&#xff0c;你可以学会很多实用的设计模式思想&#xff0c;并且提高你的编码水平。 熟悉Frame Frame 类是 J…

高昂定价,业绩增速踩下“急刹车”,圣贝拉IPO故事不好讲

近日&#xff0c;SAINT BELLA&#xff08;下称“圣贝拉”&#xff09;向港交所提交上市申请&#xff0c;瑞银集团、中信证券为其联席保荐人。 据招股书介绍&#xff0c;圣贝拉是一家家庭护理品牌集团&#xff0c;在产后护理及修复、家庭儿童护理、女性健康功能性食品方面开发产…

46、lvs集群- 博客

1、lvs集群&#xff1a; lvs&#xff1a;linux virtual server----章文嵩发起的开源项目&#xff0c;阿里。linux的内核层面实现负载均衡的软件。 主要作用&#xff1a;将多个后端服务器组成一个高可用&#xff0c;高性能的服务器集群&#xff0c;通过负载均衡的算法将客户端的…

AI究竟是在帮助开发者还是取代他们?来看大佬的观点你就明白了

AI&#xff08;人工智能&#xff09;在现代社会中扮演着越来越重要的角色&#xff0c;其在软件开发领域的应用也日益广泛。关于AI是在帮助开发者还是取代他们&#xff0c;V 哥个人认为&#xff0c;一半一半吧&#xff0c;为什么这么说&#xff0c;先不用噴&#xff0c;我们需要…

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的浪潮&#xff0c;正以前所未有的速度重塑着我们的世界。在众多AI应用领域中&#xff0c;目标检测以其独特的魅力和广泛的应用前景&#xff0c;成为了连接现实与智能世界的桥梁。本文旨在…

WPF引入多个控件库使用

目的 设计开发时有的控件库的一部分符合我们想要的UI样式&#xff0c;另一部分来自另一个控件库&#xff0c;想把两种库的样式做一个整合在同一个控件资源上。单纯通过引用的方式会导致原有样式被覆盖。这里通过设置全局样式的方式来实现。 1.安装控件库nuget包&#xff1a;H…

Python 传递参数和返回值

Python是一种功能强大的编程语言&#xff0c;它以其简洁和易用性而广受欢迎。在Python编程中&#xff0c;参数传递和返回值是函数调用中两个非常重要的概念。理解这些概念对于编写高效且可维护的代码至关重要。 一、参数传递 在Python中&#xff0c;函数参数可以通过以下几种…

css文字自适应宽度动态出现省略号...

前言 在列表排行榜中通常会出现的一个需求&#xff1a;从左到右依次是名次、头像、昵称、徽标、分数。徽标可能会有多个或者没有徽标&#xff0c;徽标长度是动态的&#xff0c;昵称如果过长要随着有无徽标进行动态截断出现省略号。如下图布局所示&#xff08;花里胡哨的底色是…

Java版Flink使用指南——分流导出

大纲 新建工程编码Pom.xml自定义无界流分流 测试工程代码 在之前的案例中&#xff0c;我们一直使用的是单个Sink来做数据的输出。实际上&#xff0c;Flink是支持多个输出流的。本文我们就来讲解如何在Flink数据输出时做分流处理。 我们将基于《Java版Flink使用指南——自定义无…

人工智能(AI)在医疗行业的应用前景

人工智能&#xff08;AI&#xff09;在医疗行业的应用前景十分广阔&#xff0c;有望彻底改变医疗行业的各个方面。需要注意的是&#xff0c;AI在医疗领域的应用也存在一些潜在的风险和挑战&#xff0c;例如算法偏见、数据隐私和安全、伦理问题等。在开发和应用AI医疗产品时&…

苹果手机短信功能停用怎么恢复?一分钟快速解决!

在使用苹果手机的过程中&#xff0c;可能会遇到短信功能突然停用的情况&#xff0c;这可能导致你无法发送或接收短信&#xff0c;影响日常通讯。这个问题可能由多种原因引起&#xff0c;如网络设置、软件冲突或运营商问题。 短信功能停用怎么恢复&#xff1f;不必担心&#xf…

【Superset】dashboard 自定义URL

URL设置 在发布仪表盘&#xff08;dashboard&#xff09;后&#xff0c;可以通过修改看板属性中的SLUG等&#xff0c;生成url 举例&#xff1a; http://localhost:8090/superset/dashboard/test/ 参数设置 以下 URL 参数可用于修改仪表板的呈现方式&#xff1a;此处参考了官…

django农产品销售系统-计算机毕业设计源码65418

基于HTML5的农产品销售系统的设计与实现 摘 要 本文针对农产品销售系统存在的传统销售方式效率低下、信息交流困难等问题&#xff0c;基于HTML5进行了系统的设计与实现。首先&#xff0c;通过对当前农产品销售系统的现状和问题进行分析&#xff0c;提出了基于HTML5的系统设计方…

蓝牙人员定位精准吗?是否会对人体有伤害?

不知道大家现在使用的蓝牙人员定位系统都是什么样的呢&#xff1f;其实就出行而言&#xff0c;使用GPS定位也就是足够了的&#xff0c;而且目前的定位相对也比较精准了&#xff0c;效果还是很不错的。但是如果说是室内定位&#xff0c;很显然常规的定位系统是无法满足使用需求的…

C语言 结构体和共用体——结构体类型与结构体变量

目录 问题的提出 数组的解决方法 我们希望的内存分配图 如何声明一个结构体类型&#xff1f; 如何定义一个结构体变量&#xff1f; 用typedef给数据类型定义一个别名 如何定义一个结构体变量&#xff1f; 结构体变量的初始化 问题的提出 数组的解决方法 我们希望的内存…

PostgREST API 安装及基础使用

PostgREST是一个独立的Web服务器&#xff0c;它将PostgreSQL数据库转换为RESTful API。它提供基于基础数据库的结构自定义的API。 PostgREST安装 首先访问Releases PostgREST/postgrest (github.com)&#xff0c;根据安装平台选择下载的源码。比如我现在的设备是Mac但是我的…