进制转换题目
PAT A1019
十进制转其他进制
string tp(int y,int p) {
int temp; //每次取模结果-即:转换后的当前位数字或字母
string s;
do {
temp = y%p; //取模
y/=p; //当前处理位已处理完,从y中删除
if(temp>=10) s+=temp-10+'A'; //若大于等于10,用字母
else s+=temp+'0';
} while(y!=0);
reverse(s.begin(),s.end()); //s中结果是从低位到高位,反转结果,使结果从高位到低位
return s;
}
其他进制转十进制
int pt(string x,int p) {
int sum=0,index=0,t=0; // sum是最后的转换结果;index是权;t是当前位数字
for(int i=x.length()-1; i>=0; i--) { // 从低位到高位处理
t = isdigit(x[i])?x[i]-'0':x[i]-'A'+10; //取出当前位数字,若是字母转换为大于等于10的数字
sum += t*pow(p,index++); //累加和 记录当前位数字乘以基数的权次幂
}
return sum;
}