递归实现进制转换(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设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐 ...
随机推荐
- Spring IoC底层原理
-------------------siwuxie095 Spring IoC 底层原理 1.IoC 即 Invers ...
- 关于调试php的socket服务端中遇到的问题及解决办法
今天终于把socket的服务端解决了,期间遇到了很多问题呢~ 1.用cmd运行php的问题: 2.socket_create()函数未定义问题: 3.查看端口的问题. 以下逐一说说解决办法: 1.在c ...
- Web页面显示日期和动态时刻脚本
<script language="JavaScript" type="text/JavaScript"> <!-- tm ...
- 去掉redhat linux提示注册
去掉提示注册的话,卸载几个软件包:#rpm -qa | grep subscription-manager 然后移除那出现的几项吧:#yum remove subscription-manager-g ...
- 关于java项目中的.classpath文件:
Classpath是Java中的重要概念: 它描述了Java虚拟机在运行一个Class时在哪些路径中加载要运行的类以及运行的类要用到的类 简单的说,就是像操作系统的path 只不过这个classpat ...
- Java Thread系列(一)线程创建
Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实 ...
- Djanjo 的app 模板路径 静态文件 完整版登录 新手三件套 以及orm
一: django中app的概念: 一个项目可以包含多个应用(app,类似于模块,主页打开多个模块就是多个app) 创建了app,要在配置文件中注册 二:模板路径配置: 1 templates文件夹 ...
- 打开窗口进行选择文件(txt文件),打开所选文件,读入文件
用mfc编写项目的时候往往需要调用窗口,允许用户通过窗口进行选择文件操作 TCHAR szBuffer[MAX_PATH] = { 0 }; OPENFILENAME ofn = { 0 }; ofn ...
- 洛谷P4312 [COCI 2009] OTOCI / 极地旅行社(link-cut-tree)
题目描述 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走在各个冰岛之间.Mi ...
- nancy中的本地化
1 建立一个文件夹 ,名称可以任意 2 添加资源文件 比如 Text.resx 3 使用 <h3>"@Text.Text.Greeting"</h3> 其中 ...