【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 = 1for(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; // 复制字符串treverse(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; // 读取整数nfor(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;    // 用于存储输入的二进制字符串// 输入二进制数的个数ncin >> 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; // 程序结束
}

三、感谢

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【UNI-APP】阿里NLS一句话听写typescript模块

阿里提供的demo代码都是javascript&#xff0c;自己捏个轮子。参考着自己写了一个阿里巴巴一句话听写Nls的typescript模块。VUE3的组合式API形式 startClient&#xff1a;开始听写&#xff0c;注意下一步要尽快开启识别和传数据&#xff0c;否则6秒后会关闭 startRecognition…

javascript高级部分笔记

javascript高级部分 Function方法 与 函数式编程 call 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象。 说明&#xff1a;call 方法可以用来代替另一个对象调用一个方法。cal…

侯捷C++面向对象高级编程(下)-2-non-explicit one argument constructor

1.构造函数 构造函数: Fraction(int num, int den 1) 初始化分子和分母&#xff0c;允许指定分子 num 和可选的分母 den。默认情况下&#xff0c;分母为 1。 加法运算符重载: Fraction operator(const Fraction& f) 重载了加法运算符 。这使得两个 Fraction 对象可以通过 …

NodeJS校园快递智能互助平台-计算机毕业设计源码58554

摘 要 随着校园人口的增加和生活节奏的加快&#xff0c;校园快递成为一个重要的服务需求。然而&#xff0c;传统的校园快递方式存在一些问题&#xff0c;例如无法满足快速和高效的需求&#xff0c;易发生丢失或损坏的情况&#xff0c;同时也给快递人员和用户带来不便。因此&am…

成功登上主要中心化交易所 (CEX) 的终极指南:从准备到上市的全面策略

对于区块链项目的创始人而言&#xff0c;成功的代币发行是项目发展的关键一步。尤其是在主要中心化交易所 (CEX) 上上市代币&#xff0c;可以极大地提高项目的曝光度和流动性。然而&#xff0c;CEX 上市过程复杂且充满挑战&#xff0c;需要创始人提前做好充分准备。本文将详细介…

JavaSE语法 | 初识Java!!!

初识Java 一、Java开发环境二、初步认识Java的main方法2.1 main方法的实现2.2 运行Java程序 三、注释四、标识符五、关键字 一、Java开发环境 IDEA版本&#xff1a;IntelliJ IDEA Community Edition 2022.3.3 JDK17 Windows 11 二、初步认识Java的main方法 2.1 main方法的实…

comsol multiphysics在岩土工程中的应用

comsol教程推荐&#xff1a; comsol multiphysics在岩土工程中的应用 [comsol multiphysics在岩土工程中的应用](https://download.csdn.net/download/qq_36980284/89529402) 出版发行项: 北京:中国建筑工业出版社,2014 ISBN及定价: 978-7-112-16188-1 CNY42.00 载体形态项:…

【Python】一文向您详细介绍 argparse中 action=‘store_false’ 的作用

【Python】一文向您详细介绍 argparse中 action‘store_false’ 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a…

邮件推送服务的自动化流程设置与优化技巧?

邮件推送服务如何定制化&#xff1f;邮件推送的安全性如何保障&#xff1f; 无论是大型企业还是小型企业&#xff0c;通过精准的邮件推送服务&#xff0c;可以实现客户关系管理的有效增强&#xff0c;提升品牌认知度和销售转化率。AokSend将探讨如何通过自动化流程设置与优化技…

天翼云高级运维工程师202407回忆题库 最新出炉

备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企&#xff0c;拔地而起&#xff0c;民企也不错&#xff0c;工资高&#xff0c;有钱途 现在看来看去&#xff0c;还是国企好&#xff0c;体制内的&#xff0c;有保障&#xff0c;树大根深 有必要备考下天…

LLM+本地知识库?简单又没那么简单

最近在研究如何将大语言模型结合本地知识库进行问答&#xff0c;虽然网上已经有很多教程&#xff0c;但大部分都是基于LangChain进行文本分割&#xff0c;然后调用模型向量化的API。这种方式的确很简单&#xff0c;但有这么几个前提&#xff1a; 大模型不使用ChatGPT的话&…

07-04 周四 关于vLLM(LLMs_inference)源码安装过程问题与解决

07-04 周四 关于LLMs_inference源码安装过程问题与解决 时间版本修改人描述2024年7月4日09:48:09V0.1宋全恒新建文档 简介 由于最近需要向vLLM上集成功能&#xff0c;因此&#xff0c;需要能够调试自己的仓库LLMs_Inference&#xff0c;该文档记录了源码编译的完整的过程。 参…

对比:9款最佳个人项目管理软件盘点

文章介绍了9款个人项目管理软件&#xff1a;PingCode、Worktile、Flowus、Todoist、Trello、Teambition、有道云笔记、Notion、Microsoft To Do。 在管理个人项目时&#xff0c;是否常感到信息零散、进度难以把控&#xff1f;选择合适的项目管理软件&#xff0c;可以有效解决这…

【密码学】从有限状态自动机到密钥流生成器

本文是对流密码内容的拓展&#xff0c;在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题&#xff1a; 伪随机密钥流是如何生成的&#xff1f;流密码、流密钥生成器和有限状态自动机之间是什么关系&#xff1f;…

Defensor 4.5:构建数据资产为中心的安全运营体系

5月31日“向星力”未来数据技术峰会上&#xff0c;星环科技重磅发布数据安全管理平台 Defensor 4.5版本。新版本引入了以数据资产为中心的数据安全运营体系&#xff0c;通过智能化大模型技术&#xff0c;帮助企业快速、精准地识别核心重要资产&#xff1b;建设全局的数据安全策…

拥抱应用创新,拒绝无谓的模型竞争

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

怎么判断自己是否适合学习PMP?

判断自己是否适合学习PMP项目管理专业人士认证&#xff0c;可以从以下几个方面进行考量&#xff1a; 1、职业发展需求&#xff1a; 如果您在项目管理领域工作&#xff0c;或计划未来从事相关工作&#xff0c;PMP认证能显著提升您的竞争力。 对于项目经理、产品经理、技术领导…

充电桩运营平台的技术方案 53页

充电桩运营平台的技术方案 53页&#xff0c;全套解决方案 内容太多&#xff0c;复制图片丢失&#xff0c;需要完整的私信我。

一次性语音芯片——智能家居的新兴技术

一次性语音芯片&#xff0c;作为现代智能家居技术&#xff0c;正以其魅力和性能&#xff0c;逐渐渗透到我们日常生活的每一个角落。这些小巧而强大的芯片&#xff0c;不仅为智能家居设备赋予了“说话”的能力&#xff0c;更在提升用户体验、增强设备交互性方面发挥了举足轻重的…

数据库db文件损坏修复方法(sqlite3:database disk image is malformed)

参考博客&#xff1a; https://www.cnblogs.com/liuyangQAQ/p/18037546 sqlite3数据库提示database disk image is malformed 解决办法-CSDN博客 【SQL】sqlite数据库损坏报错&#xff1a;database disk image is malformed&#xff08;已解决&#xff09;-CSDN博客 一、第…