日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

递归实现进制转换(C++版)

發(fā)布時(shí)間:2023/12/19 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归实现进制转换(C++版) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上次呢,我們留下了一道題,今天我們來一起看一看:

題目鏈接:https://www.cnblogs.com/gaozirong/p/10547434.html

這是我寫的程序,大家可以對(duì)照參考一下(C++):

#include<bits/stdc++.h> using namespace std; long long n,x,m; long long f(long long a,long long k) {//快速冪求a^kif(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; }

今天我們來講一講進(jìn)制,首先,進(jìn)制是什么?

進(jìn)制也就是進(jìn)位計(jì)數(shù)制,是人為定義的帶進(jìn)位的計(jì)數(shù)方法(有不帶進(jìn)位的計(jì)數(shù)方法,比如原始的結(jié)繩計(jì)數(shù)法,唱票時(shí)常用的“正”字計(jì)數(shù)法,以及類似的tally mark計(jì)數(shù))。 對(duì)于任何一種進(jìn)制---X進(jìn)制,就表示每一位置上的數(shù)運(yùn)算時(shí)都是逢X進(jìn)一位。 十進(jìn)制是逢十進(jìn)一,十六進(jìn)制是逢十六進(jìn)一,二進(jìn)制就是逢二進(jìn)一,以此類推,x進(jìn)制就是逢x進(jìn)位。

現(xiàn)在常用的是十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制,今天我們一起來看一看進(jìn)制轉(zhuǎn)換。

如何轉(zhuǎn)換?

就以十進(jìn)制轉(zhuǎn)換成二進(jìn)制為例:

例如,十進(jìn)制的115轉(zhuǎn)換為二進(jìn)制:(詳見下圖)

十進(jìn)制轉(zhuǎn)換成二進(jìn)制運(yùn)用的是短除法。如果x進(jìn)制轉(zhuǎn)換為y進(jìn)制,就要先把x轉(zhuǎn)換為十進(jìn)制數(shù),然后在用十進(jìn)制數(shù)轉(zhuǎn)換為y進(jìn)制數(shù)。

參考代碼:

參考代碼分為幾種不同的點(diǎn),供你們參考:

//二進(jìn)制轉(zhuǎn)換成八進(jìn)制: #include<bits/stdc++.h> using 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對(duì)應(yīng)的十進(jìn)制數(shù) {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);//截取最后三個(gè)字符string s2=s.substr(0,s.size()-3);//截取前面的部分return f(s2)+f(s1); } int main() {string s;cin>>s;cout<<f(s);return 0; } //十六進(jìn)制轉(zhuǎn)換成二進(jìn)制: #include<bits/stdc++.h> using namespace std; string num[]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"}; //num[i]表示的是十六進(jìn)制數(shù)i對(duì)應(yīng)的二進(jìn)制數(shù) string f(string s) {if(s.size()==1){if(s[0]>='0'&&s[0]<='9')//如果是數(shù)字,對(duì)應(yīng)的二進(jìn)制數(shù) 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')//去除前導(dǎo)0 S.erase(0,1);cout<<S;return 0; } //二進(jìn)制轉(zhuǎn)換成十六進(jìn)制: #include<bits/stdc++.h> using 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<<f(str);return 0; } //八進(jìn)制轉(zhuǎn)換成二進(jìn)制: #include<bits/stdc++.h> using namespace std; string num[]={"000","001","010","011","100","101","110","111"}; //num[i] 表示的是i對(duì)應(yīng)的的二進(jìn)制數(shù) 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')//去除前導(dǎo)0 S.erase(0,1);cout<<S;return 0; }

今天的進(jìn)制轉(zhuǎn)換和上期的快速冪一定要復(fù)習(xí)哦!

轉(zhuǎn)載于:https://www.cnblogs.com/gaozirong/p/10548843.html

總結(jié)

以上是生活随笔為你收集整理的递归实现进制转换(C++版)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。