递归实现进制转换(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设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐 ...
随机推荐
- mysql 一次性插入上万条数据测试专用
无聊期间 记录下 mysql 一次性插入上万条数据 测试的时候可以用 首先 创建一个表 t3 create table t3(id int)ENGINE = MyISAM; \d // 表示吧m ...
- (转)Java 中关于String的空对象(null) ,空值(empty),空格
原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例 ...
- 使用tengine解决负载均衡的session问题
事情的经过时这样的~~,我看了好多好多百度中nginx负载均衡中解决session问题的方式,我选择了研究url_hash的方式.经过一番配置之后,我越发觉得这百度搜出来的帖子也太过久远了吧,去htt ...
- IntelliJ IDEA 2017版开发SpringBoot之fastJsonHttpMessageConvert使用
继承WebMvcConfigurerAdapter,改写成自己的json转换工具的写法 1.建立实体类 package com.fastjson; import com.alibaba.fastjso ...
- windows平台使用spark-submit以client方式提交spark应用到standalone集群
1.spark应用打包,我喜欢打带依赖的,这样省事. 2.使用spark-submit.bat 提交应用,代码如下: for /f "tokens=1,2 delims==" %% ...
- UVa 11136 Hoax or what (STL)
题意:有 n 天,每天有m个数,开始的前一天没有数据,然后每天从这个里面拿出一个最大的和最小的,求 n 天的最大的和最小的差值相加. 析:一看就知道用set啊,多简单的STL,不过要注意,开long ...
- 如何让局域网其他电脑通过IP直接访问自己电脑的网站
具体方法如下: 1. 打开系统的控制面板 2. 打开控制面板后打开window防火墙. 3.点击图中的“高级设置”选项. 4.点击图中的“本地计算机上的高级安全 Windows 防火墙”在右侧点击“W ...
- Map类
Map类 方法 方法名 返回类型 说明 addLayer(layer, index?) layer 增加一个esri图层到map中,示例: var baseMapLayer = new ArcGIST ...
- Deep learning for visual understanding: A review
https://www.sciencedirect.com/science/article/pii/S0924271618301291?dgcid=raven_sd_recommender_email ...
- 机器学习—集成学习(Adaboost)
一.原理部分: 二.sklearn实现: from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import lo ...