十六進位制轉八進位制兩種方法
#include "stdafx.h" #include <iostream> #include <string> using namespace std;
int main() { int n=0; cin >> n; string hex[10]; for(int i=0;i<n;i++) { cin >> hex[i]; } for (int i = 0; i < n; i++) { string eight; char eig; string tow; for (int j = 0; j < hex[i].length(); j++) { if (hex[i][j] <= '9') { int now = hex[i][j]-'0'; eig = now / 8 + '0'; tow = tow + eig; eig = now % 8 / 4 + '0'; tow = tow + eig; eig = now % 4 / 2 + '0'; tow = tow + eig; eig = now % 2 + '0'; tow = tow + eig; } else { int now = hex[i][j]-'A'+10; eig = now / 8 + '0'; tow = tow + eig; eig = now % 8 / 4 + '0'; tow = tow + eig; eig = now % 4 / 2+'0'; tow = tow + eig; eig = now % 2+'0'; tow = tow + eig;
} } int m = tow.length() % 3; if (m == 1) { tow.insert(0,"00"); } if (m == 2) { tow.insert(0, "0"); } for (int k = 0; k < tow.length() / 3; k++) { eig = (tow[k*3] - '0') * 4 + (tow[k*3 + 1] - '0') * 2 + (tow[k*3 + 2]); eight = eight + eig; } if (eight[0] = '0') { for (int i = 1; i < eight.length(); i++) { cout << eight[i]; }
} cout << endl; }
system("pause"); return 0; }
---------------列舉法----------
#include "stdafx.h" #include <iostream> #include <string> using namespace std;
int main() { int n=0; cin >> n; string hex[10]; for(int i=0;i<n;i++) { cin >> hex[i]; } for (int i = 0; i < n; i++) { string eight; char eig; string tow; for (int j = 0; j < hex[i].length(); j++) { switch (hex[i][j]) { case '0':tow += "0000"; break; case '1':tow += "0001"; break; case '2':tow += "0010"; break; case '3':tow += "0011"; break; case '4':tow += "0100"; break; case '5':tow += "0101"; break; case '6':tow += "0110"; break; case '7':tow += "0111"; break; case '8':tow += "1000"; break; case '9':tow += "1001"; break; case 'A':tow += "1010"; break; case 'B':tow += "1011"; break; case 'C':tow += "1100"; break; case 'D':tow += "1101"; break; case 'E':tow += "1110"; break; case 'F':tow += "1111"; break; default: break; } } int m = tow.length() % 3; if (m == 1) { tow.insert(0,"00"); } if (m == 2) { tow.insert(0, "0"); } if (!(tow[0] == '0'&&tow[1] == '0'&&tow[2] == '0')) { eig = (tow[0] - '0') * 4 + (tow[1] - '0') * 2 + (tow[2]); eight = eight + eig; } for (int k = 3; k < tow.length() / 3; k=k+3) { if (tow.substr(k, 3) == "000") eight += "0"; else if (tow.substr(k, 3) == "001") eight += "1"; else if (tow.substr(k, 3) == "010") eight += "2"; else if (tow.substr(k, 3) == "011") eight += "3"; else if (tow.substr(k, 3) == "100") eight += "4"; else if (tow.substr(k, 3) == "101") eight += "5"; else if (tow.substr(k, 3) == "110") eight += "6"; else if (tow.substr(k, 3) == "111") eight += "7"; } cout << eight<<endl;
}
system("pause"); return 0; }