上次呢,我们留下了一道题,今天我们来一起看一看:

题目链接: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++版)的更多相关文章

  1. 进制转换excel版

  2. javascript . 04 匿名函数、递归、回调函数、对象、基于对象的javascript、状态和行为、New、This、构造函数/自定义对象、属性绑定、进制转换

    匿名函数:   没有名字的函数,函数整体加小括号不报错, 函数调用 : a:直接调用 (function (){函数体}) ( ) ; b:事件绑定 document.onlick = functio ...

  3. HDU 1877 又一版 A+B(进制转换)

    看了http://lovnet.iteye.com/blog/1690276的答案 好巧妙的方法 递归实现十进制向m进制转换 #include "stdio.h" int m; v ...

  4. 《java版进制转换》

    import java.util.Scanner; class 十进制转成十六进制_2 { public static void main(String[] args) { int num = 0; ...

  5. ACM2031_进制转换(使用了递归,代码超少的啦!!)

    进制转换 Problem Description 输入一个十进制数N,将它转换成R进制数输出.   Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R& ...

  6. 九度OJ 1026:又一版 A+B (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11412 解决:3086 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < ...

  7. Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换

    1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...

  8. C语言实现进制转换——超图面试题

    递归:递归的原理,就是自己调用自己本身.存在一个顺序的问题,如果在递归前的是顺序执行,递归后的是逆序执行,如下: void gogogo() { //递归之前 gogogo(); //递归之后 } 递 ...

  9. 第四届河南省ACM 序号互换 进制转换

    序号互换 时间限制: 1 Sec  内存限制: 128 MB 提交: 41  解决: 19 [提交][状态][讨论版] 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐 ...

随机推荐

  1. mysql 一次性插入上万条数据测试专用

    无聊期间 记录下 mysql 一次性插入上万条数据 测试的时候可以用 首先 创建一个表 t3 create table t3(id int)ENGINE = MyISAM; \d //    表示吧m ...

  2. (转)Java 中关于String的空对象(null) ,空值(empty),空格

    原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例 ...

  3. 使用tengine解决负载均衡的session问题

    事情的经过时这样的~~,我看了好多好多百度中nginx负载均衡中解决session问题的方式,我选择了研究url_hash的方式.经过一番配置之后,我越发觉得这百度搜出来的帖子也太过久远了吧,去htt ...

  4. IntelliJ IDEA 2017版开发SpringBoot之fastJsonHttpMessageConvert使用

    继承WebMvcConfigurerAdapter,改写成自己的json转换工具的写法 1.建立实体类 package com.fastjson; import com.alibaba.fastjso ...

  5. windows平台使用spark-submit以client方式提交spark应用到standalone集群

    1.spark应用打包,我喜欢打带依赖的,这样省事. 2.使用spark-submit.bat 提交应用,代码如下: for /f "tokens=1,2 delims==" %% ...

  6. UVa 11136 Hoax or what (STL)

    题意:有 n 天,每天有m个数,开始的前一天没有数据,然后每天从这个里面拿出一个最大的和最小的,求 n 天的最大的和最小的差值相加. 析:一看就知道用set啊,多简单的STL,不过要注意,开long ...

  7. 如何让局域网其他电脑通过IP直接访问自己电脑的网站

    具体方法如下: 1. 打开系统的控制面板 2. 打开控制面板后打开window防火墙. 3.点击图中的“高级设置”选项. 4.点击图中的“本地计算机上的高级安全 Windows 防火墙”在右侧点击“W ...

  8. Map类

    Map类 方法 方法名 返回类型 说明 addLayer(layer, index?) layer 增加一个esri图层到map中,示例: var baseMapLayer = new ArcGIST ...

  9. Deep learning for visual understanding: A review

    https://www.sciencedirect.com/science/article/pii/S0924271618301291?dgcid=raven_sd_recommender_email ...

  10. 机器学习—集成学习(Adaboost)

    一.原理部分: 二.sklearn实现: from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import lo ...