10进制转m进制

1<m<10

#include<iostream>
#include<string.h>
using namespace std;

int a[1000],i;
//10进制转m进制
void _10tom(int m,long long num)
{
   //确保数为0时至少执行一次

do
    {
        a[i++] = num%m;
        num /= m;
    }while(num!=0);

}
int main(){
    int m, A, B;
    while (cin >> m >> A >> B)
    {
        if (m == 0)
            return 0;
        i = 0;
        _10tom(m, A + B);
        for (int j = i - 1; j >= 0; j--)
            cout << a[j];
        cout << endl;
    }
    return 0;
}

 

### 三进制换的基本方法 在C++中实现将一个N进制的数换为M进制,通常采用一种间接方法:先将N进制的数换为十进制,然后再将十进制换为M进制。这种方法具有通用性,适用于所有合法的进制范围(2到36)[^1]。 #### 将N进制字符串换为十进制整数 要将一个N进制字符串换为十进制整数,可以通过逐位解析字符串并进行累加的方式实现。具体来说,每一位的值乘以当前进制的幂次,然后累加得到最终的十进制结果。例如: ```cpp #include <iostream> #include <string> using namespace std; int Char2Int(char target) { if (target >= '0' && target <= '9') { return target - '0'; } else { return target - 'A' + 10; } } int ConvertM2T(const string& str, int m) { int number = 0; for (int i = 0; i < str.size(); ++i) { number = number * m + Char2Int(str[i]); } return number; } ``` 此函数通过遍历字符串的每一位字符,将字符换为对应的数值,然后逐步累加得到十进制整数[^3]。 #### 将十进制整数换为M进制字符串 将十进制整数换为M进制字符串,通常采用除以M并取余的方法,将余数按逆序存储即可。例如: ```cpp #include <iostream> #include <stack> using namespace std; string ConvertT2N(int number, int n) { stack<char> s; if (number == 0) { s.push('0'); } else { while (number > 0) { int remainder = number % n; char digit = (remainder < 10) ? ('0' + remainder) : ('A' + remainder - 10); s.push(digit); number /= n; } } string result; while (!s.empty()) { result += s.top(); s.pop(); } return result; } ``` 此函数通过栈结构存储每次的余数,最后将栈中的字符按顺序拼接,得到最终的M进制字符串[^2]。 #### 完整实现:N进制M进制 将上述两个函数组合起来,即可实现完整的N进制到M进制换: ```cpp #include <iostream> #include <string> #include <stack> using namespace std; int Char2Int(char target) { if (target >= '0' && target <= '9') { return target - '0'; } else { return target - 'A' + 10; } } int ConvertM2T(const string& str, int m) { int number = 0; for (int i = 0; i < str.size(); ++i) { number = number * m + Char2Int(str[i]); } return number; } string ConvertT2N(int number, int n) { stack<char> s; if (number == 0) { s.push('0'); } else { while (number > 0) { int remainder = number % n; char digit = (remainder < 10) ? ('0' + remainder) : ('A' + remainder - 10); s.push(digit); number /= n; } } string result; while (!s.empty()) { result += s.top(); s.pop(); } return result; } int main() { string input = "A"; // 输入为十六进制的字符串 int baseN = 16; // 输入的进制 int baseM = 2; // 输出的进制 int decimalValue = ConvertM2T(input, baseN); string result = ConvertT2N(decimalValue, baseM); cout << "输入的" << baseN << "进制数 " << input << " 换为" << baseM << "进制为: " << result << endl; return 0; } ``` 该程序首先将输入的N进制字符串换为十进制整数,然后将十进制整数换为M进制字符串,从而完成完整的换过程[^3]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值