c++语言将任意进制转化10进制,(c/c++)十进制转换任意进制数(递归和非递归)

题目描述

将非负十进制整数n转换成b进制。(其中b=2~16)

算法分析

记住这个方法:对于进制转换类问题,就是不断的余b模b。(b代表进制数的基数)

具体步骤:重复执行①和步骤②,直到n为0结束。

①取b进制数的个位:求余运算n%b,把结果存入数组。

②将10进制数降一阶:整除运算n=n/b。

③逆序输出数组元素。如果数组元素小于10,照原样输出;如果数组元素大于等于10,输出其相应的符号,例如,10输出A,11输出B......

(原文:https://blog.csdn.net/John_Wang7/article/details/62244114)

eg:将13转换为2进制的过程如下:

n = 13,b = 2

->>13 % 2 = 1

->>13 / 2 = 6

->> 6 % 2 =0

->> 6 / 2 = 3

->> 3 % 2 = 1

->>3 / 2 = 1

->> 1 % 2 = 1

->> 1 / 2 = 0

输出:1101

递归模型

00964d58d5de662ea09d9b22b57f806c.png

程序实现

①递归

void Convert(int i,int b)

{

if(i==0)//递归出口

{

return;

}

a[cnt++]=i%b;

Convert(i/b,b);

}

②非递归

非递归就是利用while循环。

//非递归

void Convert(int i,int b)

{

while(i)

{

a[cnt++] = i % b;

i = i / b;

}

}

运行结果

468774367e47fb82c1f261b0f30e8fe3.png

附:程序源码

#include#include#includeusing namespace std;

int cnt=0;

int flag = 1;

char a[255];

//递归

/*

void Convert(int i,int b)

{

if(i==0)//递归出口

{

return;

}

a[cnt++]=i%b;

Convert(i/b,b);

}

*/

//非递归

void Convert(int i,int b)

{

while(i)

{

a[cnt++] = i % b;

i = i / b;

}

}

int Print(int &num)

{

for(int i=cnt-1;i>-1;i--)

{

if(a[i]<10)

{

printf("%d",a[i]);

}

else

{

printf("%c",a[i]+'A'-10);

}

}

printf("\n");

printf("继续吗?(1(Y)/0(N)");

num = 0;

scanf("%d",&flag);

return flag;

}

int main()

{

while(flag)

{

int integer,base;

printf("输入一个大于0的任意正整数:");

scanf("%d",&integer);

printf("输入进制数的基数:(2~16)");

scanf("%d",&base);

if( base>16 || base<2 )

{

printf("输入错误!请输入2~16以内的进制数基数:");

scanf("%d",&base);

}

Convert(integer,base);

flag = Print(cnt);

}

return 0;

}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值