题目:



又是一道水题,进制转换

2-16进制间随机转换,最大长度十位,也就是FFFFFFFFFF,需要用long long

有一个破坑,卡了很久,输入可能为零,要单独处理


AC代码:

#include<iostream>
#include<string>
using namespace std;
int main(){
   	int b, e;
   	string s;
   	while(cin >> b >> e >> s){
   	    int len = s.length();
   	    long long sum = 0;
   	    int i;
   	    if(s == "0"){
            cout << s << " base " << b << " = " << s << " base " << e << endl;
            continue;
   	    }
   	    for(i = len - 1 ; i >= 0; i --){
   	        char c = s[i];
   	        int num;
   	        if(c >= '0' && c <= '9'){
   	            num = c - '0';
   	        }else{
   	            num = c - 'A' + 10;
   	        }
   	        if(num >= b){
   	            cout << s << " is an illegal base " << b << " number" << endl;
                break;
   	        }
            long long  key = 1;
   	        for(int j = 1; j <= len - i - 1; j++){
   	            key *= b;
   	        }
   	        sum += key * num;
   	    }
   	    if(i == -1){
   	        if(e == 10){
   	            cout << s << " base " << b << " = " << sum << " base " << e << endl;
   	        }else{
                string newS;
                while (sum != 0){
                    int num = sum % e;
                    char c;
                    if(num >= 10){
                        c = 'A' - 10 + num;
                    }else{
                        c = '0' + num;
                    }
                    newS.insert(newS.begin(), c);
                    sum /= e;
                }
                cout << s << " base " << b << " = " << newS << " base " << e << endl;
   	        }
   	    }
   	}
	return 0;
}


GitHub链接:UVA356 Square Pegs And Round Holes

个人网站运营不易ヾ(◍°∇°◍)ノ゙如果有帮到你赞助一下吧

Kevin博客
  • 最新评论
  • 总共0条评论