关于计算机中数制进制的问题?如何进行进制转换?
关于计算机中数制进制的问题?如何进行进制转换?二进制十进制八进制十六进制这些进制都这么理解?这些进制之间如何转换?用什么方法?...
关于计算机中数制进制的问题?如何进行进制转换? 二进制 十进制 八进制 十六进制 这些进制都这么理解? 这些进制之间如何转换? 用什么方法?
展开
展开全部
#include
<stdio.h>
#include
<string.h>
#include
"stdlib.h"
#include
<conio.h>
#define
size
100
//定义一个栈
typedef
struct
{
int
x[size];
int
top
;
}stack;
//栈初始化
void
init(stack
&p){
p.top=0;
}
//入栈
int
push(stack
&p,int
&e){
if
(p.top<size)
{
p.x[p.top++]=e;
return
1;
}
return
0;
}
//出栈
int
pop(stack
&p,int
&e){
if
(p.top>0)
{
e=p.x[--p.top];
return
1;
}
return
0;
}
//将
n进制数据转化为十进制表示
void
td(char
s[],int
n,int
&num){
char
*p;
int
e;
p=s;
num=0;
while(*p){
if(*p>='A')
//16
进制转化
e=*p-'A'+10;
else
e=*p-'0';
p++;
num=num*n+e;
}
}
//将十进制转化为
m
进制
void
tp(int
num,int
m,char
s[]){
//
int
n=0,e;
char
*p;
stack
b;
init(b);
p=s;
while(num){
//将十进制数据逐位分离
压入栈中
此时
数据为倒序
n=num%m;
if(n>9)
e=n-10+'A';
else
e=n+'0';
push(b,e);
num/=m;
}
while(pop(b,e)){
//从栈中取出元素,存入数组
s
中
此时
数据为顺序
*p=e;
p++;
}
*p='\0';
//在数组
尾部加结束标志
}
int
check(char
s[],int
n){
char
*p;
p=s;
if(n<=10){
while(*p){
if(*p-'0'>n)
return
1;
p++;
}
}
else
if(n>10){
while(*p){
if(*p>='A'&&*p-'A'+10>n)
return
1;
p++;
}
}
return
0;
}
void
trans(char
s[],int
n,int
m){
int
*p,num;
td(s,n,num);
s[0]='\0';
tp(num,m,s);
}
void
main(){
int
n,m;
char
s[size],c;
int
fp=1;
//是否结束的标志
do{
puts("\t\t\t数据的各个进制之间的转化\n");
s[0]='\0';
//数组初始化
printf("\n输入一个数据:
");
gets(s);
//读入数据
字符串型
printf("\b输入原来的进制
和
要转化的进制,
如
10-2
:
");
scanf("%d%c%d",&n,&c,&m);
//读入
进制转化
由
n进制转化为
m进制
输入形式
如:10-2
16-2
if(check(s,n))
{
//判断是否合法
printf("\n\t错误
!输入的数据与进制不相配,
按任意键,继续输入。");
getch();
}
else{
printf("\n结果\n\t\t\t%d
进制
:
%s
",n,s);
trans(s,n,m);//转化
printf("\n
\t\t\t%d
进制
:
%s
\n\n",m,s);
//输出
数据
字符串型
printf("\t\t\t继续输入
1,
退出输入
0:
");
scanf("%d",&fp);
}
c=getchar();
//读取
回车键
system("cls");
}while(fp);
}
<stdio.h>
#include
<string.h>
#include
"stdlib.h"
#include
<conio.h>
#define
size
100
//定义一个栈
typedef
struct
{
int
x[size];
int
top
;
}stack;
//栈初始化
void
init(stack
&p){
p.top=0;
}
//入栈
int
push(stack
&p,int
&e){
if
(p.top<size)
{
p.x[p.top++]=e;
return
1;
}
return
0;
}
//出栈
int
pop(stack
&p,int
&e){
if
(p.top>0)
{
e=p.x[--p.top];
return
1;
}
return
0;
}
//将
n进制数据转化为十进制表示
void
td(char
s[],int
n,int
&num){
char
*p;
int
e;
p=s;
num=0;
while(*p){
if(*p>='A')
//16
进制转化
e=*p-'A'+10;
else
e=*p-'0';
p++;
num=num*n+e;
}
}
//将十进制转化为
m
进制
void
tp(int
num,int
m,char
s[]){
//
int
n=0,e;
char
*p;
stack
b;
init(b);
p=s;
while(num){
//将十进制数据逐位分离
压入栈中
此时
数据为倒序
n=num%m;
if(n>9)
e=n-10+'A';
else
e=n+'0';
push(b,e);
num/=m;
}
while(pop(b,e)){
//从栈中取出元素,存入数组
s
中
此时
数据为顺序
*p=e;
p++;
}
*p='\0';
//在数组
尾部加结束标志
}
int
check(char
s[],int
n){
char
*p;
p=s;
if(n<=10){
while(*p){
if(*p-'0'>n)
return
1;
p++;
}
}
else
if(n>10){
while(*p){
if(*p>='A'&&*p-'A'+10>n)
return
1;
p++;
}
}
return
0;
}
void
trans(char
s[],int
n,int
m){
int
*p,num;
td(s,n,num);
s[0]='\0';
tp(num,m,s);
}
void
main(){
int
n,m;
char
s[size],c;
int
fp=1;
//是否结束的标志
do{
puts("\t\t\t数据的各个进制之间的转化\n");
s[0]='\0';
//数组初始化
printf("\n输入一个数据:
");
gets(s);
//读入数据
字符串型
printf("\b输入原来的进制
和
要转化的进制,
如
10-2
:
");
scanf("%d%c%d",&n,&c,&m);
//读入
进制转化
由
n进制转化为
m进制
输入形式
如:10-2
16-2
if(check(s,n))
{
//判断是否合法
printf("\n\t错误
!输入的数据与进制不相配,
按任意键,继续输入。");
getch();
}
else{
printf("\n结果\n\t\t\t%d
进制
:
%s
",n,s);
trans(s,n,m);//转化
printf("\n
\t\t\t%d
进制
:
%s
\n\n",m,s);
//输出
数据
字符串型
printf("\t\t\t继续输入
1,
退出输入
0:
");
scanf("%d",&fp);
}
c=getchar();
//读取
回车键
system("cls");
}while(fp);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询