用c++编写一个十进制换成二进制的程序,要求用栈

用c++编写一个十进制换成二进制的程序,要求用栈,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描局猜述:

速度,另外有没有人熟悉数据结构的?教教我吧!我在学数据结构,可以是学了大半学期什么也不懂,最简桐巧型单的程序也编写不出来。救救我吧。能帮助我的请加我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="")  # 输出对应的字母,不换行


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12564883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存