递归实现进制转换(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设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐 ...
随机推荐
- 给我们的Empty Object加个图标
Gizmos.DrawIcon (transform.position, "1.png", true);
- 265. Paint House II 房子涂色K种选择的版本
[抄题]: There are a row of n houses, each house can be painted with one of the k colors. The cost of p ...
- 部署MVC项目ManagedPipelineHandler报错
"处理程序ExtensionlessUrlHandler-Integrated-4.0在其模块列表中有一个错误模块ManagedPipelineHandler": 解决方法:以管理 ...
- etl业务说明图
- ST-LINK驱动的安装
1.下载ST-LINK驱动ST-LINK_USB_V2_1_Driver 双击dpinst_amd64.exe来安装. 成功会显示: 2.进入MDK5里面去配置ST-LINK 通过魔术棒选项: a.D ...
- 手机端获取用户详细地理位置(高德地图API)
项目开发需要获取用户详细的地理位置信息,使用了高德地图API接口 1,注册高德地图开发者账号获取开发者Key 2,页面调用 <script type="text/javascript& ...
- spring mvc 数据回显
1.spring mvc自动将传入的pojo数据存入request域 request中的key是该pojo类名,首字母小写. JSP controller 第一次访问user.jsp 填写表单 点击提 ...
- HDU1233 还是畅通工程 2017-04-12 19:49 64人阅读 评论(0) 收藏
还是畅通工程 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- DW2.0
一.DW2.0从企业的角度,吸引企业的原因: 1.数据仓库基础设施的成本不再持续增长.在第一代数据仓库中,技术基础设施的成本是不断增长的,随着数据量的增长,基础设施的成本会以指数级增长.但是使用DW2 ...
- 9、Dockerfile语法
在Dockerfile中定义了很多关键字,通过关键字来完成Dockerfile的编写. Dockerfile官方文档 9.1 FROM 在Dockerfile中FROM主要是指定这个Doc ...