📄 jzzh.txt
字号:
http://forum.ikaka.com/
刚看到有人贴出进制转换需要调用库函数,我想还是自己写一个任意进制之间的转换,该程序在转换成负进制的时候,被转换的数据只能是10进制的,正数转换不存在,但要首先在输入第一个基数的时候指明你输入的数据是几进制,该程序在c任何c语言编译器下面调试通过
#include<stdio.h>
#include<math.h>
main()
{
int i,n,m,r,s,j,base1,base2;
int a[101];
long h1[20],h2[20],len;
long sum=0;
char c[20],choice;
puts("转换进制的基数是负数吗?");
scanf("%c",&choice);
if(choice==`y`||choice==`Y`)
{
printf("请输入要转换的数和要转换的基数(n,-r)注意:你输入的n必须是10进制");
scanf("%d,%d",&n,&r);
printf("%d",n); printf("=");
r=-r;
m=1;
for(i=1;i<=100;i++)/*初始化数组*/
a[i]=0;
a[1]=-1;
do
{
a[1]=a[1]+1;
i=1;
while (a[i]==r)
{
a[i]=0; i=i+1; a[i]=a[i]+1 ;
}
if (i>m) m=i;
s=0;
for(i=m;i>=1;i--)
s=s*(-r)+a[i];
}while (n-s);
for(i=m;i>=1;i--)
if(a[i]<=9) printf("%d", a[i]);
else printf("%c", (a[i]+55)) ;
printf("(base");
printf("%d",r);
printf(")\n");
}
else
{
puts("请输入要转换的数");
scanf("%s",&c);
puts("请输入你这个数的基数和要转换成的基数(base1,base2)");
scanf("%i,%i",&base1,&base2);
len=strlen;
for(i=0;i<len;i++)/*因为是任意进制,所以首先当作字符串处理*/
h1[i]=c[i]-48;
for(i=0;i<len;i++)/*将输入的任意进制数转换为10进制*/
sum+=h1[i]*(long)pow(base1,len-i-1);
i=0;
while(sum!=0)/*利用取莫来求进制*/
{
h2[i]=sum%base2;
sum/=base2;
i++;
}
puts("结果是:");
for(j=0;j<len;j++)
printf("%c",c[j]);
printf("<%d>=",base1);
for(j=0;j<i;j++)/*输出结果以字符串输出*/
{
if(h2[j]>9)printf("%c",h2[i-j-1]+55);
else printf("%i",h2[i-j-1]);
}
printf("<%d>",base2);
puts("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -