进制转换C++

进制转换:

输入一个十进制数,将这个十进制数转换为任意(d)进制数。

原理解读:

转换法则:除以d,再倒取余

转换公式:n=(n/d)*d+n%d;

代码:

转换函数:

void transform(int e, int d/*转换为d进制*/)/*进制转换*/
{
    int i, j = 0;
    LinkStack stack;
    InitStack(stack);
    while ((e / d) != 0)
    {
        i = e % d;
        Push(stack, i);
        e = e / d;
    }
    i = e % d;
    Push(stack, i);
    while (stack)
    {
        i = Pop(stack);
        printf("%d", i);
    }
}

完整代码:

#include<iostream>
#include<math.h>
using namespace std;
typedef struct SNode
{
    int data;
    struct SNode* next;
}SNode, * LinkStack;
void InitStack(LinkStack& s)
{
    s = NULL;
}
void Push(LinkStack& k, int j)/*插入栈*/
{
    SNode* p = new SNode;
    p->data = j;
    p->next = k;
    k = p;
}
int Pop(LinkStack& s)/*出栈*/
{
    int m;
    SNode* p = s;
    if (s != NULL)
    {
        m = s->data;
        s = s->next;
        delete p;
    }
    else return 0;
    return m;
}
int main()
{
    int a, b;
    cout << "please input a number" << endl;
    cin >> a;
    cout << "witch system do you want to transform into";
    cin >> b;
    transform(a, b);
    return 0;
}
输出结果:
总结:

进制转换主要需利用公式进行不同进制间数据的转换,是栈的一个典型应用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是C++实现大整数进制转换的示例代码: ```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; // 将字符串表示的数字换为整数数组 void str2num(string str, int num[], int &len, int &dot_pos, int &dot_len) { len = 0; dot_pos = -1; dot_len = 0; for (int i = 0; i < str.length(); i++) { if (str[i] == '.') { dot_pos = len; } else { num[len++] = str[i] - '0'; } } if (dot_pos != -1) { dot_len = len - dot_pos - 1; } } // 将整数数组换为字符串表示的数字 string num2str(int num[], int len, int dot_pos, int dot_len) { string str = ""; for (int i = 0; i < len; i++) { str += num[i] + '0'; if (i == dot_pos) { str += '.'; } } if (dot_pos == -1) { str += '.'; } for (int i = 0; i < dot_len; i++) { str += '0'; } return str; } // 将整数数组从from_base进制转换为to_base进制 void base_convert(int num[], int &len, int from_base, int to_base) { int new_num[1000], new_len = 0; while (len > 0) { int r = 0; for (int i = len - 1; i >= 0; i--) { int t = r * from_base + num[i]; num[i] = t / to_base; r = t % to_base; } new_num[new_len++] = r; while (len > 0 && num[len - 1] == 0) { len--; } } for (int i = 0; i < new_len; i++) { num[i] = new_num[new_len - i - 1]; } len = new_len; } int main() { string str; int from_base, to_base; cin >> str >> from_base >> to_base; int num[1000], len, dot_pos, dot_len; str2num(str, num, len, dot_pos, dot_len); // 将整数部分从from_base进制转换10进制 int int_num[1000], int_len = 0; for (int i = 0; i < dot_pos; i++) { int r = 0; for (int j = int_len - 1; j >= 0; j--) { int t = r * from_base + int_num[j]; int_num[j] = t % 10; r = t / 10; } while (r > 0) { int_num[int_len++] = r % 10; r /= 10; } int_num[int_len++] = num[i]; } reverse(int_num, int_num + int_len); // 将小数部分从from_base进制转换10进制 int dot_num[1000], dot_len = 0; for (int i = dot_pos + 1; i < len; i++) { int r = 0; for (int j = 0; j < dot_len; j++) { int t = r * from_base + dot_num[j]; dot_num[j] = t % 10; r = t / 10; } while (r > 0) { dot_num[dot_len++] = r % 10; r /= 10; } dot_num[dot_len++] = num[i]; } // 将整数部分和小数部分分别从10进制换为to_base进制 base_convert(int_num, int_len, 10, to_base); base_convert(dot_num, dot_len, 10, to_base); // 将整数部分和小数部分合并为一个数组 for (int i = 0; i < int_len; i++) { num[i] = int_num[i]; } num[int_len++] = -1; for (int i = 0; i < dot_len; i++) { num[int_len++] = dot_num[i]; } // 将整个数组换为字符串表示的数字 str = num2str(num, int_len, dot_pos, dot_len); cout << str << endl; return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值