有错误的。任意进制转换类模版。求指教。
来源:互联网 发布:最有效的网络推广方法 编辑:程序博客网 时间: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进制
- 有错误的。任意进制转换类模版。求指教。
- 简单的猜数程序,求指教,有疑惑啊!!
- 任意的进制转换
- 任意的进制转换
- 任意进制的转换
- 任意进制的转换
- 任意的进制转换
- 数组模版类(有错误)
- COM组件:完成任意进制到任意进制的转换
- 任意进制转换
- 任意进制转换
- 任意进制转换
- 任意进制转换
- 任意进制转换
- 任意进制转换!!!
- 任意进制转换
- 任意进制转换
- 任意进制转换
- H.323
- String,StringBuffer与StringBuilder的区别
- fedora 开机自动登录及脚本自动运行
- DIR-110路由器 邮件设置
- 学习Ultimate Toolbox笔记二(BackgroundPainter)
- 有错误的。任意进制转换类模版。求指教。
- CSDN社区英雄图谱
- CSDN网友挑选的2007年最有价值文章
- 14. 8. 2. JToggleButton is a button that has two states. Pressed and not pressed.
- CSDN技术英雄会,会了哪些英雄?
- Android四种Activity的加载模式
- 近10年最强的50本计算机图书,您读过几本?
- UVa 401 - Palindromes
- opecv--cvFindContours