首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

进制转换器1.0(C语言编写)(数学运算法模式)

作者:  时间: 2011-06-17

进制转换器1.0(C语言编写),数学运算法写的,还是存在输入纠错功能的BUG。

#include "stdio.h"
#include "math.h"
#include "stdlib.h"

rzs(long int *w,long int j);
szr(long int *w,long int d);

main()
{
 long int a,b,c,x,y;
 char e[50];
 while(1)
 {
        do
  {
  printf("输入转换的原进制数:");
  scanf("%ld",&b);
  fflush(stdin);
  }while(b!=2&&b!=8&&b!=16&&b!=10);
  do
  {
  printf("输入转换之后的进制数:");
  scanf("%ld",&c);
  fflush(stdin);
  }while(c!=2&&c!=8&&c!=16&&c!=10);
  if(b==10&&c==16)
  {
   printf("输入要进行转换的数字:");
   scanf("%ld",&a);
   printf("%x\n",a);
  }
  else if(b==16&&c==10)
  { 
   printf("输入要进行转换的数字:");
   scanf("%x",&a);
   printf("%ld\n",a);
  }
  else if((b==2||b==8)&&c==10)
  {
   printf("输入要进行转换的数字:");
   scanf("%ld",&a);
   rzs(&a,b);
   printf("%ld\n",a);
  }
  else if(b==10&&c==8)
  {
   printf("输入要进行转换的数字:");
   scanf("%ld",&a);
   szr(&a,c);
   printf("%ld\n",a);
  }
  else if(b==2&&c==8||c==2&&b==8)
  {
   printf("输入要进行转换的数字:");
   scanf("%ld",&a);
   rzs(&a,b);
   x=a;
   szr(&x,c);
   printf("%ld\n",x);
  }
  else if((b==2||b==8)&&c==16)
  {
   printf("输入要进行转换的数字:");
   scanf("%ld",&a);
   rzs(&a,b);
   printf("%x\n",a);
  }
  else if(b==16&&(c==8||c==2))
  {
   printf("输入要进行转换的数字:");
   scanf("%x",&a);
   itoa(a,e,2);
   printf("%s\n",e);
  }
  else if(b==10&&c==2)
  {
   printf("输入要进行转换的数字:");
   scanf("%ld",&a);
   itoa(a,e,2);
   printf("%s\n",e);
  }
 }
}

rzs(long int *w,long int j)
{
 long int k=0,b=0,a[32],f[32],i,c,d=10,e=1;
 k=*w;
 for(c=0;c<32;c++)
 {
  if(k/e%d==0)
  {
   a[c]=0;
   e=e*10;
  }
  else
  {
   a[c]=k/e%d;
   e=e*10;
  }
 }
 for(i=0;i<32;i++)
 {
  f[i]=pow(j,i);
 }
 c=0,i=0;
 while(c<32||i<32)
 {
  b=b+a[c++]*f[i++];
 }
 *w=b;
}

szr(long int *w,long int d)
{
 long int a[1000],b=0,i,c=0,e=1,j=0;
 b=*w;
 for(i=0;;i++)
 {
  a[i]=b%d;
  b=b/d;
  c++;
  if(b==0)
   break;
 }
 i=c;
 while(i>0)
 {
  a[i]=a[i]*pow(10,i);
  e=e/10;
  i--;
 }
 for(i=0;i<c;i++)
 {
  j+=a[i];
 }
 *w=j;
}