其他进制转化为10进制和10进制转化为其他进制(均一个函数)c++

今天专门抽出来一点时间来弄一下,进制转化的问题,不论是其他进制转化为10进制还是10进制转化为其他进制,均使用同一个函数来完成,只需要手动输入从哪个进制转化为哪个进制。

代码如下:

#include <iostream>
#include <cmath>
#include <cctype>
using namespace std;
void TenToOther(int n1,int n2)
{
    int n,s[100]={0},i=0;
    string s2="0123456789ABCDEF";  //将s和s2对应起来,方便输出字母
    cin>>n;
    while(n!=0){
        s[i++]=n%n2;
        n/=n2;
    }
    for(int j=i-1;j>=0;j--)
        if(j==0&&s[j]==0) continue;
        else cout<<s2[s[j]];
}
void OtherToTen(int n1,int n2)
{
    string s;
    cin>>s;
    int sum=0,k=s.size()-1;
    for(int i=0;i<s.size();i++,k--)
        if(isdigit(s[i]))sum+=int(s[i]-'0')*pow(n1,k);
        else sum+=int(s[i]-'A'+10)*pow(n1,k);
    cout<<sum<<endl;
}
int main()
{
    int n1,n2,n;
    cout<<"n1---->n2"<<endl;
    cin>>n1>>n2;
    if(n1==10) TenToOther(n1,n2);
    else if(n2==10) OtherToTen(n1,n2);
    return 0;
}

来总结一下:
1)十进制转化为其他进制时,为了避免余数超过10,所以对于输出的数据还是需要用s2来转化一下。
2)其他进制转化为十进制,因为其他进制中还有字母所以需要用一个string 类来存储输入的数据,最后在输入的时候,还需要判断一下这个string类中存储的是数字还是字母,再进行相应的转化。

C++中,实现多进制十进制有多种方法,以下为你介绍几种常见的方法及代码示例。 ### 方法一:使用`std::stoul`函数 `std::stoul` 函数可以将字符串转换为无符号长整型,通过设置不同的基数可以实现多进制十进制。 ```cpp #include <iostream> #include <string> int main() { std::string numStr; int base; std::cout << "请输入要转换的数字字符串: "; std::cin >> numStr; std::cout << "请输入该数字的进制: "; std::cin >> base; try { unsigned long decimalNum = std::stoul(numStr, nullptr, base); std::cout << "转换后的十进制数为: " << decimalNum << std::endl; } catch (const std::invalid_argument& e) { std::cerr << "输入无效,请检查输入的数字进制是否正确。" << std::endl; } catch (const std::out_of_range& e) { std::cerr << "转换结果超出范围。" << std::endl; } return 0; } ``` ### 方法二:手动实现转换逻辑 手动实现转换逻辑可以更好地理解转换原理,以下是一个通用的多进制十进制函数: ```cpp #include <iostream> #include <string> #include <cmath> int convertToDecimal(const std::string& numStr, int base) { int decimalNum = 0; int power = 0; for (int i = numStr.length() - 1; i >= 0; --i) { char digit = numStr[i]; if (digit >= '0' && digit <= '9') { decimalNum += (digit - '0') * std::pow(base, power); } else if (digit >= 'A' && digit <= 'F') { decimalNum += (digit - 'A' + 10) * std::pow(base, power); } else if (digit >= 'a' && digit <= 'f') { decimalNum += (digit - 'a' + 10) * std::pow(base, power); } else { throw std::invalid_argument("输入包含无效字符。"); } ++power; } return decimalNum; } int main() { std::string numStr; int base; std::cout << "请输入要转换的数字字符串: "; std::cin >> numStr; std::cout << "请输入该数字的进制: "; std::cin >> base; try { int decimalNum = convertToDecimal(numStr, base); std::cout << "转换后的十进制数为: " << decimalNum << std::endl; } catch (const std::invalid_argument& e) { std::cerr << e.what() << std::endl; } return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值