有错误的。任意进制转换类模版。求指教。

来源:互联网 发布:最有效的网络推广方法 编辑:程序博客网 时间:2024/05/17 02:17
 

#include<iostream>
#include"head.h"
using namespace std;

void main()
{
 /*xconvert10 num;
 num.input();
 num.array_convert();
 num.convert();
 num.output();
 */
 c_result number;
 number.head_output();
 number.end_output();
 system("pause");
 
}
#include<iostream>
#include"conio.h"
#include"head.h"
using namespace std;

 

//*********************************************************************************************************
//           XCONVERT10类实现的开始
//*********************************************************************************************************
xconvert10::xconvert10()  //构造函数,输入要输入数字的进制

  xlong=0;
  xpoint=999;
  head_a=0;
  end_a=0;
 cout<<"请输入您将要输入的数字的进制(2、8、10、16):";
 cin>>x;
 while((!cin)||(!((x==2)||(x==8)||(x==10)||(x==16))))
 {
  cout<<"您输的数据不合法,请输入数字:";
  cin.clear();
        cin.ignore(1024,'\n');
  cin>>x;
 }
 for(int i=0;i<100;i++)
  array[i]=' ';

}

 

 


void xconvert10::check1()  //检查输入的进制是否违规
{
 int inspect(0);  //inspect是用于标记输入的是否是2,8,10,16合法字符 不是则提示重新输入
 switch(x)   //用于判断输入是否合法 合法将1付给INSPECT
  {
   case 2:
    inspect=1;
    break;
   case 8:
    inspect=1;
    break;
   case 10:
    inspect=1;
    break;
   case 16:
    inspect=1;
    break;
   default:
    inspect=0;
    break;
  }
 while(inspect==0)
 {  
  cout<<endl<<"你输入的是"<<x<<"错误的进制,请重新输入:";
  cin.ignore(1024,'\n');
  cin>>x;
  switch(x)
  {
   case 2:
    inspect=1;
    break;
   case 8:
    inspect=1;
    break;
   case 10:
    inspect=1;
    break;
   case 16:
    inspect=1;
    break;
   default:
    inspect=0;
  }
 }
 cout<<endl<<"您输入的进制为:"<<x<<endl;
}

 

 

 

void xconvert10::input()  //输入X进制数字
{
 int i=0;
 xlong=0;
 xpoint=999;
 cout<<"请输入您的"<<x<<"进制数字:";
 cin.ignore(1024,'\n');
 cin>>array;

 while(array[i])
 { 
  xlong++; //取数组长度
  if(array[i]=='.'&&xpoint==999)
  {
   xpoint=i; //取小数点位置
 
  }
  i++;
 }
 
 cout<<endl<<"你输入的数字为:";
 cout<<array<<endl;

 check2();
}

 

 

void xconvert10::check2()  //检查输入的数字是否合法
{
 int i=0;
 int num_wrong=0;  //检测输入的数字是否含有非法字符 如:二进制只能有0,1,'.'
 int point_wrong=0;  //检查小数点的个数是否正确,可以为0或者1
 switch(x)
  {
   case 2:
    while(array[i]!='\0')
    { 
     if(array[i]!='1'&&array[i]!='0'&&array[i]!='.')
      num_wrong=1;
     if(array[i]=='.')
     {
      point_wrong++;      
     }
     i++;
    }
    break;
   case 8:
    while(array[i]!='\0')
    { 
     if((array[i]<'0'||array[i]>'7')&&array[i]!='.')
      num_wrong=1;
     if(array[i]=='.')
     {
      point_wrong++;      
     }
     i++;
    }
    break;
   case 10:
     while(array[i]!='\0')
    { 
     if((array[i]<'0'||array[i]>'9')&&array[i]!='.')
      num_wrong=1;
     if(array[i]=='.')
     {
      point_wrong++;      
     }
     i++;
    }
    break;
   case 16:
    while(array[i]!='\0')
    { 
     if((array[i]<'0'||array[i]>'9')&&array[i]!='.'&&(array[i]<'a'||array[i]>'f')&&(array[i]<'A'||array[i]>'Z'))
      num_wrong=1;
     if(array[i]=='.')
     {
      point_wrong++;      
     }
     i++;
    }
    break;    
  }
 if(array[0]=='\0')
  num_wrong=1;
 if(num_wrong==1||point_wrong>1||xpoint==0)
 { 
  cout<<endl<<"你输入的数字不合法请重新输入"<<endl;
  input();
 }
}


void xconvert10::array_convert()
{
 int i=0;
 while(array[i]!='\0')
 {
  switch(array[i])
  {
   case '.':
   a_int[i]=0;
   break;
   case '0':
   a_int[i]=0;
   break;
   case '1':
   a_int[i]=1;
   break;
   case '2':
   a_int[i]=2;
   break;
   case '3':
   a_int[i]=3;
   break;
   case '4':
   a_int[i]=4;
   break;
   case '5':
   a_int[i]=5;
   break;
   case '6':
   a_int[i]=6;
   break;
   case '7':
   a_int[i]=7;
   break;
   case '8':
   a_int[i]=8;
   break;
   case '9':
   a_int[i]=9;
   break;
   case 'a':
   a_int[i]=10;
   break;
   case 'b':
   a_int[i]=11;
   break;
   case 'c':
   a_int[i]=12;
   break;
   case 'd':
   a_int[i]=13;
   break;
   case 'e':
   a_int[i]=14;
   break;
   case 'f':
   a_int[i]=15;
   break;
   case 'A':
   a_int[i]=10;
   break;
   case 'B':
   a_int[i]=11;
   break;
   case 'C':
   a_int[i]=12;
   break;
   case 'D':
   a_int[i]=13;
   break;
   case 'E':
   a_int[i]=14;
   break;
   case 'F':
   a_int[i]=15;
   break;
  }
  i++;
 }
}

void xconvert10::convert()
{
 int m=0,n=1;
 float f=1;
 if(xpoint!=999)
  for(m=xpoint-1;m>-1;m--)
  {
   head_a+=n*a_int[m];
   n*=x;
  }
 else
  for(m=xlong-1;m>-1;m--)
  {
   head_a+=n*a_int[m];
    n*=x;
  }

 if(xpoint!=999)
 {
  for(m=xpoint+1;m<xlong;m++)
  {
   f/=x;
   end_a+=f*a_int[m];
  }
 }
 else
 {
  end_a=0;
 }
}

void xconvert10::output()
{
 cout<<"head_a="<<head_a<<endl;
 cout<<"end_a="<<end_a<<endl;
}

//*********************************************************************************************************
//           C_RESULT类实现的开始
//*********************************************************************************************************
c_result::c_result()
{
 num.input();
 num.array_convert();
 num.convert();
 cout<<"请输入您将要输出的数字的进制(2、8、10、16):";
 cin.ignore(1024,'\n');
 cin>>y;
 while((!cin)||(!((y==2)||(y==8)||(y==10)||(y==16))))
 {
  cout<<"您输的数据不合法,请输入数字:";
  cin.clear();
        cin.ignore(1024,'\n');
  cin>>y;
 }
}

 


void c_result::head_output()
{
 int head,result,i=0;
 int Store[100];
 head=num.get_head_a();
 cout<<"你要的结果是(小数点后精确最多10位):";
 while(head>=y)
 {
  result=head%y;
  head/=y;
  Store[i]=result;
  ++i;
 }
  Store[i]=head;
  for(;i>-1;i--)
  switch(Store[i])
  {
   case 0:
    cout<<"0";
    break;
   case 1:
    cout<<"1";
    break;
   case 2:
    cout<<"2";
    break;
   case 3:
    cout<<"3";
    break;
   case 4:
    cout<<"4";
    break;
   case 5:
    cout<<"5";
    break;
   case 6:
    cout<<"6";
    break;
   case 7:
    cout<<"7";
    break;
   case 8:
    cout<<"8";
    break;
   case 9:
    cout<<"9";
    break;
   case 10:
    cout<<"a";
    break;
   case 11:
    cout<<"b";
    break;
   case 12:
    cout<<"c";
    break;
   case 13:
    cout<<"d";
    break;
   case 14:
    cout<<"e";
    break;
   case 15:
    cout<<"f";
    break;
  }
}


void c_result::end_output()
{
 float end,result,cmp;
 int count=1,mul;
 cmp=0.0;
 end=num.get_end_a();
 if(end!=cmp)
 { cout<<".";
 while(count<=10&&end)
 {
  mul=int(end*y);
  switch(mul)
  {
   case 0:
    cout<<"0";
    break;
   case 1:
    cout<<"1";
    break;
   case 2:
    cout<<"2";
    break;
   case 3:
    cout<<"3";
    break;
   case 4:
    cout<<"4";
    break;
   case 5:
    cout<<"5";
    break;
   case 6:
    cout<<"6";
    break;
   case 7:
    cout<<"7";
    break;
   case 8:
    cout<<"8";
    break;
   case 9:
    cout<<"9";
    break;
   case 10:
    cout<<"a";
    break;
   case 11:
    cout<<"b";
    break;
   case 12:
    cout<<"c";
    break;
   case 13:
    cout<<"d";
    break;
   case 14:
    cout<<"e";
    break;
   case 15:
    cout<<"f";
    break;
  }
  end=end*y-mul;
  count++;
 }
 }
 cout<<endl<<"谢谢使用";
 
}
#include<iostream>
using namespace std;

class xconvert10
{
 public:
   xconvert10();  //构造函数,输入要输入数字的进制
   void output();  //测试输出用函数   @@注已经修改测试完毕删除@@
   void convert();  //将X进制转换为十进制数
   void input();  //输入X进制数字
   void check1();  //检查输入的进制是否违规  @@注已经修改测试完毕删除@@
   void check2();  //检查输入的数字是否合法
   void array_convert(); //将字符数组array[100]转换为整型
   void a_get();    //分别取出整型数字a_int的小数和整数部分的和
   int get_head_a(){return head_a;}  //返回head_a的值
   float get_end_a(){return end_a;}  //返回end_a的值
   int x;   //输入数字的进制
   int xlong;  //记录输入的字符数组的长度,初始状态为0
   int xpoint;  //记录小数点在字符数组中的位置,初始状态为999
   char array[100];    //记录你输入的字符串
   int a_int[100];  //定义整型数组,将字符数组array[100]转换为整型
   int head_a;  //存储整型数组的整数部分之和,初始值为0
   float end_a;  //存储整型数组的小数部分之和,初始值为0
};
//用于将输入的数字装换成十进制数字

 class c_result
 {
  public:
   c_result();  //构造函数
   void input_y();  //输入你要输出数字的进制
   void head_output(); //转换整数部分并输出结果
   void end_output(); //转换小数部分并输出结果
   xconvert10 num;   //定义xconvert10类型的NUM,用于和xconvert函数数据共享
   int head_b;    //存储X进制的整数部分
   float end_b;   //存储X进制的小数部分
   int y;
 };
 //用于将储存的十进制转换为X进制