高精度之间的转换,利用模板即可,可以看的资料里面
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char str[1000];; int newBase , oldBase; int start[1000] , ans[1000] , res[1000]; int getNum(char c){ if(c >= '0' && c <= '9') return c-'0'; if(c >= 'A' && c <= 'Z') return c-'A'+10; //if(c >= 'a' && c <= 'z') return c-'a'+36; } char getChar(int i){ if(i >= 0 && i<= 9) return i+'0'; if(i >= 10 && i<= 35) return i-10+'A'; //if(i >= 36 && i <= 61) return i-36+'a'; } void change(){ int i; start[0] = strlen(str); for(i = 1 ; i <= start[0] ; i++) start[i] = getNum(str[i-1]); } void solve(){ memset(res , 0 , sizeof(res)); int y, i, j; while(start[0] >= 1){ y = 0; i = 1; ans[0] = start[0]; while(i <= start[0]){ y = y*oldBase + start[i]; ans[i++] = y / newBase; y %= newBase; } res[++res[0]] = y; i = 1; while(i <= ans[0] && ans[i] == 0) i++; memset(start , 0 , sizeof(start)); for(j = i;j <= ans[0] ;j++) start[++start[0]] = ans[j]; memset(ans , 0 ,sizeof(ans)); } } void output(){ int i; for(i = res[0] ; i >= 1 ; i--) printf("%c",getChar(res[i])); cout<<endl; } int main(){ int n , i; cin>>n; for(i = 1 ; i <= n ; i++){ cin>>oldBase>>newBase; cin>>str; cout<<oldBase<<" "<<str<<endl; cout<<newBase<<" "; change(); solve(); output(); if(i != n) cout<<endl; } return 0; }