重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
唉,研究了一天,碰到对于10进制以上的就实在不会了。计算机不好表示啊。若要表示,就只有用字符数组。但用字符数组又会造成很多麻烦。
成都创新互联长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为五华企业提供专业的成都网站设计、做网站,五华网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
我只会写出10以内进制间及16进制的相互转换了。
思前想后,似乎只有这条思路是最为简单的:间接转换!
10以内任意进制先转换为十进制,然后由十进制再转换为新进制。
唉,一直编这题,都烦死了。
不想再把程序写出来了,只提供下思路,留给你自己编吧。
很抱歉,没能帮上你...
1、打开visualC++6.0-文件-新建-文件-C++SourceFile。
2、输入预处理命令和主函数:
#includestdio.h /*输入输出头文件*/
voidmain()/*空类型:主函数*/
3、定义变量和数组的数据类型并输入一个十进制:
intb[16],x,k,r,i;/*定义变量和数组的数据类型为整型*/
printf("输入一个十进制:");/*输出文字提示*/
scanf("%d",x); /*输入一个十进制数字*/
k=-1;/*将-1赋给k*/
4、用除R取余倒计法将十进制的数转化成二进制的数:
do/*用循环将十进制的数转化成二进制的数*/
{
r=x%2;/*用除R取余倒计法计算二进制*/
b[++k]=r;/*将值赋给数组*/
x/=2;/*将原数除2*/
}while(x=1);
5、输出结果:
for(i=k;i=0;i--) /*将上面倒计的数正回来*/
printf("%d",b[i]);/*输出结果*/
printf("\n");
6、完整的源代码:
#includestdio.h /*输入输出头文件*/
voidmain()/*空类型:主函数*/
{
intb[16],x,k,r,i;/*定义变量和数组的数据类型为整型*/
printf("输入一个十进制:");/*输出文字提示*/
scanf("%d",x); /*输入一个十进制数字*/
k=-1;/*将-1赋给k*/
do/*用循环将十进制的数转化成二进制的数*/
{
r=x%2;/*用除R取余倒计法计算二进制*/
b[++k]=r;/*将值赋给数组*/
x/=2;/*将原数除2*/
}while(x=1);
for(i=k;i=0;i--) /*将上面倒计的数正回来*/
printf("%d",b[i]);/*输出结果*/
printf("\n");
}
#include
stdio.h
#include
stdlib.h
//输入十进制数N和转化的进制数M
void
trans(int
n,int
m)
{
if(n)
{
trans(n/m,m);
if(n%m10)
printf("%c",n%m+'0');
else
printf("%c",n%m-10+'A');
}
}
void
main()
{
int
m,n,x;
char
ch;
printf("给定进制数M:");
scanf("%d",m);
loop:
printf("给定一个%d进制的数X:",m);
fflush(stdin);
//一个M进制的数X转10进制
for(x=0;;)
{
ch=getchar();
if(ch='0'
ch='9')
{
n=ch-'0';
}
else
if(ch='a'
ch='z')
{
n=ch-'a'+10;
}
else
if(ch='A'
ch='Z')
{
n=ch-'A'+10;
}
else
{
break;
}
if(n=m)
{
goto
loop;
}
x=x*m+n;
}
printf("转化成十进制数为:%d\n",x);
printf("给定要转化进制数M:");
scanf("%d",m);
printf("转化成%d进制后的结果为:",m);
trans(x,m);
printf("\n");
}
其他的方法:
trans函数也可以这样写:
void
trans(int
n,int
m)
{
char
str[100];
int
i;
for(i=0;n0;i++)
{
if(n%m10)
{
str[i]=n%m+'0';
}
else
{
str[i]=n%m-10+'A';
}
n=n/m;
}
for(n=i;n0;n--)
{
printf("%c",str[n-1]);
}
}
任意进制之间的进制转换。需要考虑高精度整形的设计,用数组模拟一个整形变量。一位一位的进行进制转换,算法思想和十进制转换到二进制相同,除以目标进制,余数为低位。这种进制转换实用性不强,一般出现在计算机程序竞赛当中。
8,10,16进制的转换。在C语言中有不少函数都能实现上面几种进制之间的进制转换。
推荐其中的sprintf/sscanf函数。
sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数][标识符][宽度][.精度]指示符
若想输出'%'本身时, 请使用'%%'处理。
1. 处理字符方向。负号时表示从后向前处理。
2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
3. 字符总宽度。为最小宽度。
4. 精确度。指在小数点后的浮点数位数。
转换字符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
例程(16进制和10进制之间的转换):
#include stdio.h
#include limits.h
int main()
{
char s[100] = {0};
sprintf(s, "%x", INT_MAX);
printf("%s\n", s); // 7fffffff
char str[100] = "7fffffff";
int i = 0;
sscanf(str, "%x", i);
printf("%d\n", i); // 2147483647
return 0;
}