牛客oj 習題6.3進制轉換&&習題6.4數值轉換

 

十進制轉別的模除,別的轉十進制乘加。記住了。

另外這題還是不嚴謹,沒說明字符串幾位,多了就得大數處理了。

 

 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <cctype>
#include <climits>
 
using namespace std;
 
const int MAXN = 1005;
const int INF = INT_MAX;

int CharToInt(char x){
	if(x >= '0' && x <= '9') return (x - '0');
	else if(x >= 'a' && x <= 'f') return (10 + x - 'a');
}
 
int main(){
  //  freopen("in.txt", "r", stdin);
    string str;
    while(cin >> str){
    	str.erase(0, 2);
    	long long ans = 0;
    	for(int i = 0; i < str.size(); i++){
    		if(isupper(str[i])) str[i] = tolower(str[i]);
    		ans *= 16;
    		ans += CharToInt(str[i]);
    	}
    	printf("%lld\n", ans);
    }
    return 0;
}

 

 

任意進制之間轉換,先轉化爲十進制,再轉化爲任意進制,爲兩類題的結合版。

 

 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <cctype>
#include <climits>
 
using namespace std;
 
const int MAXN = 1005;
const int INF = INT_MAX;

int CharToInt(char x){
	if(x >= '0' && x <= '9') return (x - '0');
	else if(x >= 'A' && x <= 'F') return (10 + x - 'A');
}

char IntToChar(int x){
	if(x >= 0 && x <= 9) return (x + '0');
	else if(x >= 10 && x <= 16) return ( x - 10 + 'A');
}
 
int main(){
 //   freopen("in.txt", "r", stdin);
    string n;
    int a, b;
    while(cin >> a >> n >> b){
    	bool flag = true;
    	int end = 0;
    	for(int i = 0; i < n.size(); i++){
    		if(n[i] == '0' && flag) end++;
    		if(n[i] != '0') flag = false;
    		if(islower(n[i])) n[i] = toupper(n[i]);
    	}
    	n.erase(0, end);//去前導0 
    	long long decimal = 0; 
    	for(int i = 0; i < n.size(); i++){
    		decimal *= a;
    		decimal += CharToInt(n[i]);
    	}
    	string ans;
    	if(decimal == 0) ans = "0";
    	while(decimal != 0){
    		ans += IntToChar(decimal%b);
    		decimal /= b;
    	}
    	reverse(ans.begin(), ans.end());
    	cout << ans << endl;
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章