将整数转换为10进制、2进制、16进制的数字串

将整数转换为10进制、2进制、16进制的数字串

//author:yangyang
//main.c
#include "stdafx.h"
#define N 2  //可以改为8,即8进制
void jinzhi_10_2_8();
void jinzhi_16();
int number_str = 0;//存放进制的个数
int num_str[50] = {0};//存放进制数
int *pnum_str = num_str;//数组指针
int num = 0;//存放十进制数
int jinzhi = N;
int main()
{
    printf("输入十进制数\n");
    scanf_s("%d", &num);
    printf("%d的10进制为%d\n", num, num);
    jinzhi_10_2_8();
    jinzhi_16();
    return 0;
}
void jinzhi_16()
{
    number_str = 0;//存放进制的个数
    char num_str[50] = { 0 };//存放进制数
    char *pnum_str = num_str;//数组指针
    int yuzheng = num;//取整后的数字
    for (int i = 0; i < 50; i++)//转二进制
    {
        int tmpchar = yuzheng % 16;//取余
        yuzheng = yuzheng / 16;//取整
        switch (tmpchar)//因考虑到16进制有abcdef,不采用+48的形式
        {
            case 0:*pnum_str = '0'; break;
            case 1:*pnum_str = '1'; break;
            case 2:*pnum_str = '2'; break;
            case 3:*pnum_str = '3'; break;
            case 4:*pnum_str = '4'; break;
            case 5:*pnum_str = '5'; break;
            case 6:*pnum_str = '6'; break;
            case 7:*pnum_str = '7'; break;
            case 8:*pnum_str = '8'; break;
            case 9:*pnum_str = '9'; break;
            case 10:*pnum_str = 'a'; break;
            case 11:*pnum_str = 'b'; break;
            case 12:*pnum_str = 'c'; break;
            case 13:*pnum_str = 'd'; break;
            case 14:*pnum_str = 'e'; break;
            case 15:*pnum_str = 'f'; break;
            default:break;
        }
        pnum_str++;//地址移位
        number_str++;//加一位
        if (yuzheng == 0)
        {
            break;
        }
    }
    printf("%d的16进制为", num);
    for (int i = 0; i < number_str; i++)
    {
        pnum_str--;
    }
    printf("\n");
}
void jinzhi_10_2_8()//二进制,八进制共用一个函数,根据需要更改N的值
{
    int yuzheng = num;//取整后的数字
    for (int i = 0; i < 50; i++)//转二进制
    {
        *pnum_str = yuzheng % N;//取余
        yuzheng = yuzheng / N;//取整
        pnum_str++;//地址移位
        number_str++;//加一位
        if (yuzheng == 0)
        {
            break;
        }
    }
    printf("%d的%d进制为", num, jinzhi);
    for (int i = 0; i < number_str; i++)
    {
        pnum_str--;
        printf("%d", *pnum_str);
    }
    printf("\n");
}

当N=2时候的结果
这里写图片描述
当N=8时候的结果
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值