问题描局猜述:
速度,另外有没有人熟悉数据结构的?教教我吧!我在学数据结构,可以是学了大半学期什么也不懂,最简桐巧型单的程序也编写不出来。救救我吧。能帮助我的请加我QQ:***********。本人不胜宽悄感激啊
解析:
呵呵
由于时间不是很充足!代码可能写的不是很精简!VC++调试通过
#include <iostream.h>
struct node
{
int data
node *next
}
node *Tdata
void main()
{
Tdata=new node
node *top
top=Tdata
Tdata->next=NULL
cout<<"请输入一个待转换的十进制数:"
int temp,x
cin>>temp
do 转换二进制
{
x=temp%2
temp=temp/2
node *Ttemp=new node
Ttemp->data=x
Ttemp->next=top
top=Ttemp
}while(temp)
cout<<"转换好的二进制为:"
while (top->next!=NULL) 输出二进制
{
cout<<top->data<<" "
top=top->next
}
}
提示:程序还是要自己写出来,上面应该主要考的是栈的知识!
以上仅供参考!
#include<iostream>#include<string.h>
using namespace std
void change(char num[],int a,int b)
int main()
{
int a,b
char con,num[100000]={}
start:
cout<<"------------------------------------------------------------"<<endl
cout<<"-----本程序可将任意进制的高精度整数或小数转换成任意进制-----"<<endl
cout<<"--------注意:进制数不可超过36,不过我相信你也用洞蔽不到--------"<<endl
cout<<"-----------若发现存在计算错误,请及时向纳桐州程序员报告-----------"<<endl
cout<<"------------------------------------------------------------"<<endl
cout<<"请输入该数字:"<<endl
cin>>num
cout<<"请输入此数字原本的进轮判制数:"<<endl
cin>>a
cout<<"请输入要转换成的进制数:"<<endl
cin>>b
change(num,a,b)
cout<<"继续?Y/N"<<endl
cin>>con
if(con=='Y'||con=='y')
{
system("CLS")
goto start
}
return 0
}
void change(char num[],int a,int b)
{
int cnt=0,temp=0,temp1,i,j,ret[100000]={},len=strlen(num),point
double temp2=0,temp3
point=len
for(i=0i<leni++)
{
if(num[i]=='.')
{
point=i
continue
}
if(num[i]<'0')
{
cout<<"输入数据错误"<<endl
return
}
else
{
if(num[i]>'9')
{
if(a<=10||num[i]<'A')
{
cout<<"输入数据错误"<<endl
return
}
else
if(num[i]>a-10+'A')
{
cout<<"输入数据错误"<<endl
return
}
}
}
if(num[i]<='9')
num[i]-='0'
else
num[i]=num[i]-'A'+10
}
if(point==1&&num[0]==0)
cout<<0
else
{
for(i=0i<pointi++)
{
temp1=num[i]
for(j=ij<point-1j++)
temp1*=a
temp+=temp1
}
while(temp)
{
ret[cnt]=temp%b
temp=temp/b
cnt++
}
for(i=cnt-1i>=0i--)
cout<<ret[i]
}
if(point==len)
{
cout<<endl
return
}
else
{
cout<<'.'
for(i=point+1i<leni++)
{
temp3=num[i]
for(j=pointj<ij++)
temp3=temp3/a
temp2+=temp3
}
for(i=0i<72i++)
{
temp2*=b
temp=temp2
if(temp<10)
cout<<temp
else
cout<<(char)(temp-10+'A')
temp2-=temp
}
cout<<endl<<"(由于技术原因,本数据可能出现误差,如果涉及到重大事件则最好手算)" <<endl
}
}
拿着玩去吧……
根据一般方法,N进制转10进制使用位权展开法,10进制转N进制使用求余数法。
就是不断用待转换数除以N然后求余数,最衫搜后把所有余数倒着放一起。
例子:
将24转换为2进制:
原数 进制 余数
24 % 2 ->0
12 % 2 ->0
6 % 2 ->0
3 % 2 ->1
1 % 2 ->1
从下往上看:(11000)2,就是24的二进制
所以……上代码。
letters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' # 从0~10~Z的字母表,最高支持36进制
num = 82493216 # 要转换的数唯塌谈
sy = 13 # 要转换到的进制
li = [] # 用来保存求余数后的值
while num/sy>0: # 如果num/sy大于0,即还没有转换完指碰
li.append(num%sy) # 存储一个余数
num //= sy # 除掉
li.reverse() # 倒转
for x in li:
print(letters[x], end="") # 输出对应的字母,不换行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)