主题:[原创]请教各位高高手
以下程序是我自己编的,实现2-9进制之内任意进制的小数转换(只实现小数,不包含整数)
#include<iostream.h>
#include<cmath>
const float e=0.0001;
const int maxsize=10;
void stack_show(int top,int stack[maxsize]);
int stack_push(int top,int data,int stack[maxsize]);
float convert(float radix1,float floatdata);
int stack[maxsize];
int main(void)
{
float floatdata,condata;
float radix1,radix2;
int top=-1;
int count=6;
cout<<"输入a进制的小数a1"<<endl;
cin>>radix1>>floatdata;
cout<<"输入要求转换的进制"<<endl;
cin>>radix2;
condata=convert(radix1,floatdata);
do
{
condata=condata*radix2;
top=stack_push(top,int(condata),stack);
condata=condata-int(condata);
count--;
}while(count);
stack_show(top,stack);
return 0;
}
/*****************进栈*************/
int stack_push(int top,int data,int stack[maxsize])
{
if(top==maxsize-1)
cout<<"栈溢出"<<endl;
else
{
top++;
stack[top]=data;
}
return top;
}
/****************将小数转换为10进制*************/
float convert(float radix,float data)
{
float sum=0.0,s1;
int d,count1=0,count2=6;
d=(int)(data*10.0);
do
{
count1++;
sum+=d*pow(1.0/radix,count1);
s1=data*10;
data=s1-(int)s1;
d=(int)(data*10.0);
count2--;
}while(count2);
return sum;
}
/********显示***********/
void stack_show(int top,int stack[maxsize])
{
int d=0;
cout<<"0.";
do
{
cout<<stack[d];
d++;
}while(d<=top);
cout<<endl;
}
可以运行,转换的结果有些是对的,但有些还有一定的误差,我就知道这个方法不好,不知道各位有什么好的方法
#include<iostream.h>
#include<cmath>
const float e=0.0001;
const int maxsize=10;
void stack_show(int top,int stack[maxsize]);
int stack_push(int top,int data,int stack[maxsize]);
float convert(float radix1,float floatdata);
int stack[maxsize];
int main(void)
{
float floatdata,condata;
float radix1,radix2;
int top=-1;
int count=6;
cout<<"输入a进制的小数a1"<<endl;
cin>>radix1>>floatdata;
cout<<"输入要求转换的进制"<<endl;
cin>>radix2;
condata=convert(radix1,floatdata);
do
{
condata=condata*radix2;
top=stack_push(top,int(condata),stack);
condata=condata-int(condata);
count--;
}while(count);
stack_show(top,stack);
return 0;
}
/*****************进栈*************/
int stack_push(int top,int data,int stack[maxsize])
{
if(top==maxsize-1)
cout<<"栈溢出"<<endl;
else
{
top++;
stack[top]=data;
}
return top;
}
/****************将小数转换为10进制*************/
float convert(float radix,float data)
{
float sum=0.0,s1;
int d,count1=0,count2=6;
d=(int)(data*10.0);
do
{
count1++;
sum+=d*pow(1.0/radix,count1);
s1=data*10;
data=s1-(int)s1;
d=(int)(data*10.0);
count2--;
}while(count2);
return sum;
}
/********显示***********/
void stack_show(int top,int stack[maxsize])
{
int d=0;
cout<<"0.";
do
{
cout<<stack[d];
d++;
}while(d<=top);
cout<<endl;
}
可以运行,转换的结果有些是对的,但有些还有一定的误差,我就知道这个方法不好,不知道各位有什么好的方法