黑马程序员技术交流社区
标题:
编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)
[打印本页]
作者:
1026238004
时间:
2015-2-1 11:23
标题:
编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)
你们有这道题吗?你们是怎么做的?这段代码运行不了,错误显示找不到strrev这个函数架构,麻烦用你们的电脑运行看看!
#include <stdio.h>
#include <string.h>
void TentoAny(int number,char *str,int digits);
int main()
{
//十进制整数和要转换的进制数值
int number,digit;
//存放被转换的数值
char str[80];
printf("输入一个十进制数:");
scanf("%d",&number);
printf("\n---------2到16进制对应关系----------\n");
for(i=2;i<=16;i++)
{
//调用函数
TentoAny(number,str,digit);
printf("%d转换为%d进制为:%s\n",number,digit,str);
}
return 0;
}
void TentoAny(int numbers,char *str,int digits)
{
int i=0;
if(digits>16||digits<2)//非2~16进制则直接退出
return ;
while(numbers)
{
switch(numbers%digits)
{
//根据余数的情况做相应处理
case 15:
str[i++]='F';
break;
case 14:
str[i++]='E';
break;
case 13:
str[i++]='D';
break;
case 12:
str[i++]='C';
break;
case 11:
str[i++]='B';
break;
case 10:
str[i++]='A';
break;
default:
str[i++]=numbers%digits+'0';
break;
}
numbers=numbers/digits;
}
str[i]='\0';
//strrev函数定义在string.h中的,是对字符串做逆序处理的函数
//这里需要逆序的原因是因为得到的结果为该进制的逆序
strrev(str);
}
作者:
vera
时间:
2015-2-1 11:49
编译没通过。运行不了啊
作者:
钟楼上的猫
时间:
2015-2-1 14:58
你没发现 你的digit根本就没有值吗
作者:
钟楼上的猫
时间:
2015-2-1 15:21
你把 for(i=2;i<=16;i++) 改成 for(digits=2;digits<=16;digits++) 这样就对了 有个小问题就是你用的那个字符串反转函数并不是标准函数库中的,不过你可以自己写一个strrev函数 反正也很简单
作者:
离经叛道的女子
时间:
2015-7-9 12:00
钟楼上的猫 发表于 2015-2-1 15:21
你把 for(i=2;i
那标准的反转函数是什么啊
作者:
tangbinbin
时间:
2015-8-16 16:17
我这里建立了一个简单的代码实现这个功能,一起学习下。
#include <stdio.h>
#include <conio.h>
int main()
{
int num;
unsigned int i;
int R;
int bitnum[100];
printf("请输入一个十进制整数:");
scanf("%d",&num);
printf("请输入需要转换的进制数(2-16之间):");
scanf("%d",&R);
if(R<2||R>16)
{
printf("输入数据错误");
return 0;
}
else
for (i=0;num!=0;i++)
{
bitnum[i]=num%R;
num=num/R;
}
while(i--)
printf("%d",bitnum[i]);
return 0;
}
作者:
wtj900
时间:
2015-8-28 07:22
或许能提供些许帮助,请参考
#include <stdio.h>
int main()
{
int i,num,R;
char bitnum[100];
printf("请输入一个十进制整数:");
scanf("%d",&num);
printf("请输入要转换的进制数(2-16之间):");
scanf("%d",&R);
if(R<2||R>16){ //判断进制数范围
printf("输入数据错误");
}else
//计算需要转换的进制数
for (i=0;num!=0;i++){
if (num % R >= 10) {
bitnum[i]= 'A' + (num % R - 10);
} else {
bitnum[i]=num % R + '0';
}
num = num / R;
}
while(i--){ //逆向输出
printf("%c",bitnum[i]);
}
return 0;
}
作者:
linexs
时间:
2015-11-16 01:17
#include <stdio.h>
int main()
{
int i,num,R; //自增i在外部定义,便于最后逆序输出
char bit[100];
printf("请输入一个十进制整数:");
scanf("%d",&num);
printf("请输入要转换的进制数(2-16之间):");
scanf("%d",&R);
if(R<2||R>16){ // 判断进制数范围
printf("输入数据错误");
}else
// 计算需要转换的进制数
for (i= 0;num!= 0;i++) {
if (num % R >= 10) {
bit[i]= 'A' + (num % R - 10);
} else {
bit[i]= '0' + num % R;
}
num = num / R;
}
// 逆向输出
while(i--){
printf("%c",bit[i]);
}
printf("\nThe end!\n");
return 0;
}
作者:
沐小妖mavs
时间:
2015-12-5 02:14
支持一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2