将十进制转化为N进制

本文介绍了一个简单的C语言程序,该程序用于将一个十进制数转换为另一个指定基数的数。用户可以输入一个十进制整数和目标进制,程序会输出相应的进制转换结果。
#include<stdio.h>
int main()
{
    int x,i,cnt=0,n;
    int number[100];
    scanf("%d%d",&x,&n);
    while(x)
    {
        number[cnt]=x%n;
        cnt++;
        x=x/n;
    }
    for(i=cnt-1;i>0;i--)
    {
        printf("%d",number[i]);
    }
    return 0;
}

十进制转化为n进制数有多种方法,以下为你详细介绍: ### 除留余数法 这是一种常用的方法。对于整数部分,如果当前数据不为0,就进入循环求余数,余数代表当前位的值;再求除数,除数表示这个数据能整除出多少个进制数,用于确定位置(进位)。最后将余数逆序输出。例如将十进制数100转化为3进制: - 第一次:100 % 3 = 1,商为33; - 第二次:33 % 3 = 0,商为11; - 第三次:11 % 3 = 2,商为3; - 第四次:3 % 3 = 0,商为1; - 第五次:1 % 3 = 1,商为0。 逆序输出结果为10201 [^2]。 ### C语言实现 可以编写函数将带小数点的十进制转化为n进制数。以下是示例代码: ```c #include <stdio.h> #include <string.h> char c[32]; char* fun(double m, int n)//将带小数点的m转化为n进制数 { int i = 0, j = 0, a[32], m1 = (int)m, tem; double m2 = m - m1; char b[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }, * p; do { a[i] = m1 % n; m1 = m1 / n; i++; } while (m1); for (--i; i >= 0; --i) { tem = a[i]; c[j++] = b[tem]; } if (m2) { c[j++] = '.'; do { m2 = m2 * n; m1 = (int)m2; a[++i] = m1; m2 = m2 - m1; } while (m2 != 0); } for (; i >= 0; --i) { tem = a[i]; c[j++] = b[tem]; } c[j] = 0; p = c; return p; } void main() { int n; double m; char s[32]; scanf("%lf %d", &m, &n); strcpy(s, fun(m, n)); printf("%s\n", s); } ``` 该代码可以处理带小数点的十进制转化为n进制数 [^1]。 ### Python实现 在Python中,可以编写函数实现十进制向不同进制数的转化。为了保持与内置函数相同的输出类型,当进制数大于10时,可以建立字典来处理超出部分。例如: ```python def conversion(num, base): if num == 0: return '0' digits = '0123456789abcdef' result = '' negative = num < 0 num = abs(num) while num: result = digits[num % base] + result num //= base if negative: result = '-' + result return result # 示例 print(conversion(123, 16)) ``` 此方法实现了将十进制转化为不同进制数的功能 [^3]。 ### 使用栈实现 可以使用栈来实现十进制转化为N进制数。以下是示例代码: ```c #include <stdio.h> #include <stack> void Result(int &result, std::stack<int> &stack_) { int Count = stack_.size(); result = 0; int num; while(Count){ num = 1; for(int i = 1; i < Count; i++){ num *= 10; } result += (num * stack_.top()); stack_.pop(); Count--; } } ``` 该代码通过栈来辅助完成十进制到N进制转换 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值