进制转换解

进制转换的代码2~16进制任意转换。
注释应该够详细能讲清楚。
总归就是先变成10进制再转换

#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
string convert(int a, string& s, int b)
{
    long val, dcount, digit;
    char result[100000], c;
    string ans;
 
    val = 0;
    for(int i=0; i<(int)s.size(); i++) {
        if(isdigit(s[i]))//判断是不是数字,有些进制下不是数字
            val = val * a + s[i] - '0';//是直接加
        else
            val = val * a + toupper(s[i]) - 'A' + 10;//不是的变成数字 toupper()函数来变
    }//变成十进制
    dcount = 0;
    while(val) {
        digit = val % b;
        val /= b;
        result[dcount++] = ((digit >= 10) ? 'A' - 10 : '0') + digit;//大于等于十的变字母储存,不是的按数字储存
    }//十进制转换存储通过取余操作
    if(dcount == 0) {
        result[dcount++] = '0';
        result[dcount] = '\0';//如果为0就是0
    } else
        result[dcount] = '\0';//字符串的结尾
    for(int i=0, j=dcount-1; i<j; i++, j--) {
        c = result[i];
        result[i] = result[j];
        result[j] = c;
    }//反向存储一波之前的是从个位开始存的
    ans = result;
    return ans;
}
int main()
{
    int t;cin>>t;
    while(t--){
    string s;
    cin>>s;
    int a,b;cin>>a>>b;//从a-b进制
    cout << convert(a, s, b) << endl;}//进行转换
    return 0;
}



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值