设计函数实现10进制整数转9进制字符串

本文详细介绍了如何将10进制整数转换为9进制字符串,通过取余和除法操作逐步获取每一位,并用字符数组存储。然后通过反转数组实现9进制字符串的正确顺序。提供的C++代码示例展示了这一过程。后续文章将探讨10进制转任意进制的方法。
摘要由CSDN通过智能技术生成

讲解方法 

先来解释一下:   假设输入一个10进制整数x

你想,9进制数是不是这样组成的:a*9^0+b*9^1+c*9^2+......

a,b,c都是我们要求的参数。

先看a*9^0是如何得到的:a*9^0后面是不是全是9的倍数?你输入的x通过取余运算(即x%9)是不是得到了a?    这样我们就得到了9进制的倒数第一位

我们再将x除以9,是不是将整体下降了一档,也就是此时变成了b*9^0 , 再重复刚才的操作,我们是不是就得到了b?

继续这样,知道取得最后一位,也就得到了9进制字符串

方法实现 

void trans(int x, char a[80])//这样转化是倒着来的,需要正过来
{
	int i = 0;
	for (i = 0; i < 80; i++)
	{
		a[i] = '\0';//一定要将字符数组初始化!!!
	}
	 char* p = a;//也可以不用指针,用i即可 a[i]=x%9+'0'
	while (x!= 0)
	{
		*p = x % 9+'0';//比如假设x%9=0,0+'0'就变成了字符0 十进制的0 ASCII值是0,
		x =x/ 9;
		p++;
	}
}

注意我们这样存放了倒着的9进制字符串,因为使用方法a*9^0+b*9^1+c*9^2时,我们正着将求得 的a,b,c...存到了数组中 但实际上a是9进制的最后一位,b是9进制的倒数第二位

因此这样求得结果后,还需要将结果对称翻转一下。

翻转的方法

void reverse(char a[80])
{
	int k = strlen(a);
	char* p = a;
	char* q = a + k-1;//比如abcd长度为4,右端是3才能完成倒置
	while (q>p)       //d与a换,b与a换...以此类推
	{
		char tep = *p;
		*p = *q;
		*q = tep;
		q--;//右边指针左移
		p++;//左边指针右移
	}       //直到两指针汇合结束
}

将翻转函数reverse 嵌套在转换函数 trans 中就能直接通过调用trans函数来输出结果

全部代码

#include<iostream>
#include<iomanip>
using namespace std;
void trans(int x, char a[80]);
void reverse(char a[80]);
int main(void)
{
	int x;
	cout << "输入待转化的数字:" << endl;
	cin >> x;
	char a[80];
	int i = 0;
	trans(x, a);
	cout << "转化为9进制为:" << endl;
	cout << a;
}
void trans(int x, char a[80])//这样转化是倒着来的,需要正过来
{
	int i = 0;
	for (i = 0; i < 80; i++)
	{
		a[i] = '\0';//一定要将字符数组初始化!!!
	}
	 char* p = a;
	while (x!= 0)
	{
		*p = x % 9+'0';//比如假设x%9=0,0+'0'就变成了字符0 十进制的0 ASCII值是0,
		x =x/ 9;
		p++;
	}
	reverse(a);
}
void reverse(char a[80])
{
	int k = strlen(a);
	char* p = a;
	char* q = a + k-1;//比如abcd长度为4,右端是3才能完成倒置
	while (q>p)
	{
		char tep = *p;
		*p = *q;
		*q = tep;
		q--;
		p++;
	}
}

以后,我会写出10进制转任意进制,请关注。

如果作者的代码有任何错误,或者你有任何问题,敬请评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值