上次呢,我们留下了一道题,今天我们来一起看一看:
题目链接:
这是我写的程序,大家可以对照参考一下(C++):
#includeusing namespace std;long long n,x,m;long long f(long long a,long long k){ //快速幂求a^k if(k==0)return 1; if(k==1)return a%n; if(k%2==0)return f((a%n)*(a%n)%n,k/2)%n; else return (f((a%n)*(a%n)%n,k/2)*(a%n))%n;}int main(){ long long k; cin>>n>>m>>k>>x; cout<<(x%n+((m%n)*(f(10,k)%n)%n))%n; return 0;}
今天我们来讲一讲进制,首先,进制是什么?
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
现在常用的是十进制、二进制、八进制和十六进制,今天我们一起来看一看进制转换。
如何转换?
就以十进制转换成二进制为例:
例如,十进制的115转换为二进制:(详见下图)
十进制转换成二进制运用的是短除法。如果x进制转换为y进制,就要先把x转换为十进制数,然后在用十进制数转换为y进制数。
参考代码:
参考代码分为几种不同的点,供你们参考:
//二进制转换成八进制:#includeusing namespace std;string num[]={ "0","1","2","3","4","5","6","7"};string f(string s){ int sum=0,j=1;//j表示的是2的多少次幂 if(s.size()<=3)//这是边界,求出s对应的十进制数 { for(int i=s.size()-1;i>=0;i--) { sum+=(s[i]-'0')*j; j*=2; } return num[sum]; } string s1=s.substr(s.size()-3,3);//截取最后三个字符 string s2=s.substr(0,s.size()-3);//截取前面的部分 return f(s2)+f(s1); }int main(){ string s; cin>>s; cout<
//十六进制转换成二进制:#includeusing namespace std;string num[]={ "0000","0001","0010","0011","0100","0101","0110","0111", "1000","1001","1010","1011","1100","1101","1110","1111"};//num[i]表示的是十六进制数i对应的二进制数 string f(string s){ if(s.size()==1) { if(s[0]>='0'&&s[0]<='9')//如果是数字,对应的二进制数 return num[s[0]-'0']; return num[s[0]-'A'+10];//处理字母 } string s1=s.substr(s.size()-1,1); string s2=s.substr(0,s.size()-1); return f(s2)+f(s1); }int main(){ string s; cin>>s; string S=f(s); while(S[0]=='0')//去除前导0 S.erase(0,1); cout<
//二进制转换成十六进制:#includeusing namespace std;string num[]={ "0","1","2","3","4","5","6","7", "8","9","A","B","C","D","E","F"};string f(string str){ if(str.size()<=4) { int sum=0,i=1; for(int j=str.size()-1;j>=0;j--) { sum+=(str[j]-'0')*i; i*=2; } return num[sum]; } string s1=str.substr(0,str.size()-4); string s2=str.substr(str.size()-4,4); return f(s1)+f(s2);}int main(){ string str; cin>>str; cout<
//八进制转换成二进制:#includeusing namespace std;string num[]={ "000","001","010","011","100","101","110","111"}; //num[i] 表示的是i对应的的二进制数 string f(string str){ if(str.size()==1) return num[str[0]-'0']; string s1=str.substr(0,str.size()-1); string s2=str.substr(str.size()-1,1); return f(s1)+f(s2);}int main(){ string str; cin>>str; string S=f(str); while(S[0]=='0')//去除前导0 S.erase(0,1); cout<
今天的进制转换和上期的快速幂一定要复习哦!