编程论坛
注册
登录
编程论坛
→
C语言论坛
C语言函数定义实现任意进制转任意进制
A154294
发布于 2020-01-03 09:57, 2075 次点击
利用函数定义写出任意进制转任意进制,想了两天还是只能写出十进制转任意进制,求大神解答,
输出结果如下:
请输入要转换的数的进制:(2-16)
请输入数字:
需要转换成几进制数:(2-16)
转换结果为:
3 回复
#2
xianfajushi
2020-01-03 19:35
知其然知其所以然,只要了解进制之间转换的道理,就可以用函数实现。
#3
xianfajushi
2020-01-03 19:38
进制间互换摆渡即可得其道理
#4
自学的数学
2020-01-04 15:11
程序代码:
#include
<iostream>
#include
<math.h>
#include
<string.h>
using
namespace
std;
int
main()
//
任意进制转换为10进制
{
char
q[
100
];
//
定义q为字符串保存原数
long
n=
0
;
//
定义转换成的十进制数为n
int
i,l,r=
0
,p,c,m=
0
,s[
100
];
//
i为原进制数,l为字符串长度,r为次方数,p为转换后的任意进制数,c为余数,m,l用于计数,s存入转换后的数组
cout
<<
"
输入要转化的数:
"
<<endl;
cin
>>q;
cout
<<
"
输入原数进制:
"
<<endl;
cin
>>i;
cout
<<
"
转换后的进制:
"
<<endl;
cin
>>p;
l=strlen(q);
strupr(q);
//
把字符串中字母全部大写,方便下一步计算
//
将任意进制数转化为十进制数
for
(l=l-
1
;l>=
0
;l--)
{
if
(q[l]<=
'
9
'
)n=n+(q[l]-
48
)*pow(i,r++);
else
n=n+(q[l]-
55
)*pow(i,r++);}
//
十进制转换为任意进制
while
(n!=
0
)
//
数制转换,结果存入数组s[m]
{ c=n%p;
n=n/p;
m++;
s[m]=c;
//
将余数按顺序存入数组s[m]中
}
for
(
int
k=m;k>=
1
;k--)
//
输出转换后的序列
{
if
(s[k]>=
10
)
//
若为十六进制等则输出相对应的字母
cout
<<(
char
)(s[k]+
55
);
else
//
否则直接输出数字
cout
<<s[k];
}
cout
<<endl;
return
0
;
}
1