/*这个程序是用回来对各种进制之间的转换(2到32)*/
#include "stdio.h"
#include "math.h"
#include "string.h"
#define N 32
int pow1(int a,int b) /*次函数的功能类似有math.h中的pow,但本函数返回的是整数*/
{ int c;
if(b==0) return 1;
if(b>0) c=a*pow1(a,b-1);
return c;
}
void f(int sum,int c,char *p,int i)/*此函数用来确定转换后的数字的各个位数上的数*/
{ int j,n;
for(n=i;n>=0;n--)
for(j=0;j
*(p+i+1)=0;
}
int w(int sum,int c)/*此函数用来判断转换后的数字有几位(i+1)*/
{int i;
for(i=0; ;i++)
{
if((sum
}
return i;
}
main()
{int a,c,i,sum,j,k,l,flag;
char b[N]={0},h[32]={0};
for(;;)
{sum=0;flag=0;
printf("***************************************************\n");
printf("** ^_^ WELCOME ^_^ **\n");
printf("***************************************************\n");
for(;;)
{ flag=0;
printf("\n 请输入你所要转换的整数(输入0退出):");
scanf("%s",b); l=strlen(b); if(!strcmp(b,"0")) break;
for(i=0;b[i]!=0;i++) /*由于输入的是字符,所以用以下转换*/
{ if(b[i]>='0'&&b[i]<='9')
b[i]-='0';
if(b[i]>='a'&&b[i]<='z')
b[i]=b[i]-'a'+10;
if(b[i]>='A'&&b[i]<='Z')
b[i]=b[i]-'A'+10;
}
for(;;)
{ printf("\n 你所输入的数的进制为(2到32):");
scanf("%d",&a);
if(a<2||a>32)
{printf("\n 您的输入有误,请重新输入!\n");
continue;
}
break;
}
for(i=0;i
{printf("\n 您的输入有误,请重新输入!\n");
flag=1;
break;
}
if(flag==1) continue;
break;
}
if(!strcmp(b,"0")) break;
for(;;)
{
printf("\n请输入你要把该数转换为的进制(2到32):");
scanf("%d",&c);
if(c<2||c>32)
{printf("\n 您的输入有误,请重新输入!\n");
continue;
}
break;
}
for(j=0;j
if(c==10)
{printf("\n 把该数字从%d进制转化到%d 进制为:%d",a,c,sum);
continue;
}
i=w(sum,c); /*判断最高位*/
f(sum,c,h,i);
for(k=i;k>=0;k--) /*以下转换是把相应的数字转换为字符*/
{ if(h[k]>=0&&h[k]<=9)
{h[k]=h[k]+'0';continue;}
if(h[k]>=10&&h[k]<=35)
{h[k]=h[k]+55;continue;}
}
printf("\n 把该数字从%d进制转化到%d 进制为:",a,c);puts(h);
}
}
#include
void main()
{
void to_base_n(unsigned long , unsigned int );
unsigned long number;
unsigned int e;
printf("Enter an integer and the evolution(q to quit):\n");
while(scanf("%lu%u", &number, &e) == 2)
{
printf("Binary equivalent: ");
to_base_n(number, e);
putchar('\n');
printf("Enter another integer and evolution(q to quit):\n");
}
printf("Done!\n");
}
void to_base_n(unsigned long n, unsigned int e)
{
int r;
r = n % e;
if(n >= e)
to_base_n(n / e ,e);
printf("%d", r);
}
这是我以前编的,编译可以通过。用的递归的方法。望采纳。
偷个懒,看看格式输出可以么,你试试sprintf,再把atoi把字符转数字