递归实现进制转换(C++版)
上次呢,我们留下了一道题,今天我们来一起看一看:
题目链接:https://www.cnblogs.com/gaozirong/p/10547434.html
这是我写的程序,大家可以对照参考一下(C++):
#include<bits/stdc++.h>
using namespace std;
long long n,x,m;
long long f(long long a,long long k)
{
//快速幂求a^k
if(k==)return ;
if(k==)return a%n;
if(k%==)return f((a%n)*(a%n)%n,k/)%n;
else return (f((a%n)*(a%n)%n,k/)*(a%n))%n;
}
int main()
{
long long k;
cin>>n>>m>>k>>x;
cout<<(x%n+((m%n)*(f(,k)%n)%n))%n;
return ;
}
今天我们来讲一讲进制,首先,进制是什么?
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
现在常用的是十进制、二进制、八进制和十六进制,今天我们一起来看一看进制转换。
如何转换?
就以十进制转换成二进制为例:
例如,十进制的115转换为二进制:(详见下图)

十进制转换成二进制运用的是短除法。如果x进制转换为y进制,就要先把x转换为十进制数,然后在用十进制数转换为y进制数。
参考代码:
参考代码分为几种不同的点,供你们参考:
//二进制转换成八进制:
#include<bits/stdc++.h>
using namespace std;
string num[]={"","","","","","","",""};
string f(string s)
{
int sum=,j=;//j表示的是2的多少次幂
if(s.size()<=)//这是边界,求出s对应的十进制数
{
for(int i=s.size()-;i>=;i--)
{
sum+=(s[i]-'')*j;
j*=;
}
return num[sum];
}
string s1=s.substr(s.size()-,);//截取最后三个字符
string s2=s.substr(,s.size()-);//截取前面的部分
return f(s2)+f(s1);
}
int main()
{
string s;
cin>>s;
cout<<f(s);
return ;
}
//十六进制转换成二进制:
#include<bits/stdc++.h>
using namespace std;
string num[]={"","","","","","","","",
"","","","","","","",""};
//num[i]表示的是十六进制数i对应的二进制数
string f(string s)
{
if(s.size()==)
{
if(s[]>=''&&s[]<='')//如果是数字,对应的二进制数
return num[s[]-''];
return num[s[]-'A'+];//处理字母
}
string s1=s.substr(s.size()-,);
string s2=s.substr(,s.size()-);
return f(s2)+f(s1);
}
int main()
{
string s;
cin>>s;
string S=f(s);
while(S[]=='')//去除前导0
S.erase(,);
cout<<S;
return ;
}
//二进制转换成十六进制:
#include<bits/stdc++.h>
using namespace std;
string num[]={"","","","","","","","",
"","","A","B","C","D","E","F"};
string f(string str)
{
if(str.size()<=)
{
int sum=,i=;
for(int j=str.size()-;j>=;j--)
{
sum+=(str[j]-'')*i;
i*=;
}
return num[sum];
}
string s1=str.substr(,str.size()-);
string s2=str.substr(str.size()-,);
return f(s1)+f(s2);
}
int main()
{
string str;
cin>>str;
cout<<f(str);
return ;
}
//八进制转换成二进制:
#include<bits/stdc++.h>
using namespace std;
string num[]={"","","","","","","",""};
//num[i] 表示的是i对应的的二进制数
string f(string str)
{
if(str.size()==)
return num[str[]-''];
string s1=str.substr(,str.size()-);
string s2=str.substr(str.size()-,);
return f(s1)+f(s2);
}
int main()
{
string str;
cin>>str;
string S=f(str);
while(S[]=='')//去除前导0
S.erase(,);
cout<<S;
return ;
}
今天的进制转换和上期的快速幂一定要复习哦!
递归实现进制转换(C++版)的更多相关文章
- 进制转换excel版
- javascript . 04 匿名函数、递归、回调函数、对象、基于对象的javascript、状态和行为、New、This、构造函数/自定义对象、属性绑定、进制转换
匿名函数: 没有名字的函数,函数整体加小括号不报错, 函数调用 : a:直接调用 (function (){函数体}) ( ) ; b:事件绑定 document.onlick = functio ...
- HDU 1877 又一版 A+B(进制转换)
看了http://lovnet.iteye.com/blog/1690276的答案 好巧妙的方法 递归实现十进制向m进制转换 #include "stdio.h" int m; v ...
- 《java版进制转换》
import java.util.Scanner; class 十进制转成十六进制_2 { public static void main(String[] args) { int num = 0; ...
- ACM2031_进制转换(使用了递归,代码超少的啦!!)
进制转换 Problem Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R& ...
- 九度OJ 1026:又一版 A+B (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11412 解决:3086 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < ...
- Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换
1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...
- C语言实现进制转换——超图面试题
递归:递归的原理,就是自己调用自己本身.存在一个顺序的问题,如果在递归前的是顺序执行,递归后的是逆序执行,如下: void gogogo() { //递归之前 gogogo(); //递归之后 } 递 ...
- 第四届河南省ACM 序号互换 进制转换
序号互换 时间限制: 1 Sec 内存限制: 128 MB 提交: 41 解决: 19 [提交][状态][讨论版] 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐 ...
随机推荐
- Liunx 解压篇
解压完 却不知道到哪里去了这时
- ios Https问题
HTTPS认证过程: ① 浏览器发送一个连接请求给安全服务器. ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器. ③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA ...
- Django基础学习四_数据库的增删改查
今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...
- 6-Ubuntu与Windows不能相互复制
在安装Ubuntu系统后发现与Windows系统的文件不能相互复制,网上查了很多教程,发现都是不能用的,能实现的方法如下所示: 第一步: sudo apt-get autoremove open-vm ...
- Nginx搭建后,图片存储在Tomcat上,前端无法回显图片问题
一.Nginx与Tomcat连接搭建的环境,Nginx设置了前端的访问路径为 (1)前端代码配置: root /usr/local/nginx/html; index index.html index ...
- UVaLive 3126 Taxi Cab Scheme (最小路径覆盖)
题意:有 n 个客人,要从 si 到 ti,每个人有一个出发时间,现在让你安排最少和出租车去接,在接客人时至少要提前一分钟到达客人的出发地点. 析:把每个客人看成一个结点,然后如果用同一个出租车接的话 ...
- sql语句语句中的正则查找
举例: select tncl_id from tncl where tncl_id regexp'^0065'; 有一表,数据有10万多条,其中某列数据示例如下: 100000-200000-300 ...
- Linux的磁盘分区(三)
RAID 廉价冗余磁盘阵列 Redundant Arrays of Inexpensive Disks 不同级别的RAID功能.特性各不相同 对比项 RAID0 RAID1 RAID10 RAID5 ...
- redis 工具
搜索关键词:redis 工具 推荐:http://redisdesktop.com/download 点评:使用顺手,顺畅. ★★★★★ 五星好评 备注:redis key 可以采用某种format ...
- Codeforces 768A Oath of the Night's Watch 2017-02-21 22:13 39人阅读 评论(0) 收藏
A. Oath of the Night's Watch time limit per test 2 seconds memory limit per test 256 megabytes input ...