讲解方法
先来解释一下: 假设输入一个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进制转任意进制,请关注。
如果作者的代码有任何错误,或者你有任何问题,敬请评论。