樹上啟發式合併: 清明是春天的節日, 所以可以叫《春節》
阿新 • • 發佈:2021-07-01
十六進位制轉八進位制
心得
看到題目,我想到的是。。。這。。。
然後我仔細想了想,我的確不會進位制的轉換,別說轉換,就連是什麼都不是特別瞭解
然後就花了一些時間去學,別說,度娘是真的香
總之,我jio得,這題比之前的題難了不止一個度。。。
然後理解了,但不是很會用,就去百度了,我jio得這位博主已經寫的很完善了,再改也沒什麼意思了
點選跳轉博主頁面
還是把我理解的程式碼也放過來吧
難點
進位制之間的轉換還有進位制的一些注意事項等
十六進位制轉換成二進位制到不是很難理解,畢竟有點離散的知識
但是二進位制轉換成八進位制就有一點點小坑,具體的。。。
看看度娘解釋
點選跳轉度娘解釋
目前java還不是很會用,太醜了,也還有很多沒改好,等補好再評論區見
#include <iostream> #include <string> using namespace std; void main() { string s1,s2; int n; int i,j,k; cin>>n; for(i=0;i<n;i++) { cin>>s1; s2=""; for(j=0;j<s1.length();j++)//用s1.length記住輸入的資料的個數,然後再用下標查詢法把十六進位制的數轉化成二進位制 { switch(s1[j]) { case '0':s2+="0000";break; case '1':s2+="0001";break; case '2':s2+="0010";break; case '3':s2+="0011";break; case '4':s2+="0100";break; case '5':s2+="0101";break; case '6':s2+="0110";break; case '7':s2+="0111";break; case '8':s2+="1000";break; case '9':s2+="1001";break; case 'A':s2+="1010";break; case 'B':s2+="1011";break; case 'C':s2+="1100";break; case 'D':s2+="1101";break; case 'E':s2+="1110";break; case 'F':s2+="1111";break; default:break; } } if(s2.length()%3==1)//用s2.length記住轉化成二進位制之後的數,在把s2轉化成八進位制,再輸出,用取三合一法 s2="00"+s2; if(s2.length()%3==2) s2="0"+s2; int flag=0; for(k=0;k<s2.length()-2;k+=3) { int p=4*(s2[k]-'0')+2*(s2[k+1]-'0')+s2[k+2]-'0';//這個我理解為一個公式之類的,因為看的真的不是很懂 if(p) flag=1; if(flag) cout<<p; } cout<<endl; } return ; }