交付清单
/*栈实现进制转化
*十进制最大转化为36进制用10(A)-35(Z)表示
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 10 //栈的初始空间
#define STACKINCREMENT 5 //追加的存储空间
//结构体
typedef struct {
int *base;
int *top;
int stacksize;
}Stack;
//Create static
void InitStack(Stack *s){
s->base = (int *)malloc(sizeof(int)*STACK_INIT_SIZE);
if(!s->base){ //申请存储空间失败,直接退出
exit(0);
}
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}
//Insert function
void Push(Stack *s,int e){
if(s->top-s->base>STACK_INIT_SIZE){//若栈已满,追加存储空间
s->base = (int *)malloc(sizeof(int)*(STACK_INIT_SIZE+STACKINCREMENT));
if(!s->base){
exit(0);
}
s->top = s->base+s->stacksize; //栈顶指针发生变化
s->stacksize += STACKINCREMENT; //存储空间发生变化
}
*++s->top = e;//栈顶指针先加一,然后赋值
}
//main function
main(){
Stack S;
int n,m; //n进制数,m基数
InitStack(&S);
while(1){ //方便多次测试程序,可以省略
printf("请输入十进制整数以及转换的进制数:");
scanf("%d %d",&n,&m);
int s = n; //保存n的数值
if(m>36){
printf("输入的基数不满足条件,退出程序");
return 0;
}
printf("十进制%d转化成%d进制结果为:",s,m);
if(n<0){ //若为负数,添加负号
n = abs(n);//负数取绝对值
printf("-");
}
while(n){
Push(&S,n%m);//十进制数取余入栈
n/=m;
}
while(S.top!=S.base){//若栈不为空,继续循环出栈
if(*S.top<=9){
printf("%d",*S.top--);//数字直接取值,然后栈顶指针减一
}
else {//if(*S.top>9&&*S.top<=36){
printf("%c",*S.top+55);
S.top--;
}
}
printf("\n");
}//对应while(1),可以省略
}
如下:
2进制后缀B
8进制后缀O
16进制后缀H
10进制转2进制例子
10进制转8进制例子
10进制转16进制例子
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//10进制转radius进制
void trans(int n, int radius, char buf[])
{
int i = 0;
int t, j;
char ch;
while (n)
{
t = n % radius;
if (t >= 10)
buf[i] = 'A' + t - 10;
else
buf[i] = '0' + t;
i++;
n /= radius;
}
buf[i] = 0;
//逆序
for (j = 0, t = i - 1; j < t; j++, t--)
{
ch = buf[j];
buf[j] = buf[t];
buf[t] = ch;
}
}
int main()
{
int n, R;
char buf[20];
scanf("%d %d", &n, &R);
trans(n, R, buf);
if (R == 2)
printf("%sB\n", buf);
else if (R == 8)
printf("%sO\n", buf);
else if (R == 16)
printf("%sH\n", buf);
else
printf("%s\n", buf);
return 0;
}
num = int(input("请输入一个整数:"))
def decToHex(number):
hexStr = ""
while number != 0:
temp = number % 16
if temp < 10:
hexStr = str(temp) + hexStr
else:
hexStr = chr(55 + temp) + hexStr
number //= 16 # number = number // 16
return "({})16".format(hexStr.upper())
def decToOct(number):
hexStr = ""
while number != 0:
temp = number % 8
if temp < 10:
hexStr = str(temp) + hexStr
else:
hexStr = chr(55 + temp) + hexStr
number //= 8
return "({})8".format(hexStr.upper())
def decToBin(number):
hexStr = ""
while number != 0:
temp = number % 2
if temp < 10:
hexStr = str(temp) + hexStr
else:
hexStr = chr(55 + temp) + hexStr
number //= 2
return "({})2".format(hexStr.upper())
print("十进制数%d,对应的十六进制数是%s" % (num, decToHex(num)))
# print("转换为八进制为:", oct(num))
print("十进制数%d,转换为八进制为:%s" % (num, decToOct(num)))
# print("转换为二进制为:", bin(num))
print("十进制数%d,转换为二进制为:%s" % (num, decToBin(num)))
这不很简单么,有没有说用那种语言实现?
python 不是有包吗
#include<stdio.h>
void binary(int, int);
int main()
{
int N, R;
while(scanf("%d %d", &N, &R)!=EOF)
{
if(N==0)
printf("%d",0);
else if(N<0)
{
printf("-");
N=-N;
}
binary(N, R);
printf("\n");
}
return 0;
}
void binary(int n, int r)
{
int m;
if(n==0)
return;
else
{
binary(n/r, r);
m=n%r;
if(m<10)
printf("%d", m);
else
printf("%c", 'A'+m-10);
}
}
可以这样搞:
步骤1: 先确认十进制数N转换为R进制有多少位?如:R的1次方是否小于N,如果小于,则判断R的2次方是否小于N,如果还小于,则继续递增R的次方数,直到R的x次方大于或者等于R,如果R的x次方刚好等于N,则直接得出结果(如:x=2时,结果为10),如果是大于R,则得出的位数为x-1,并转入步骤2
步骤2:在步骤1中得出位数为x-1【记R的(x-1)次方为A1, R的(x-2)次方为A2,R的(x-3)次方为A3】 则x-1位对应的数值计算为:N除以A1;x-2位为(N-A1)/A2;x-3位为(N-A1-A2)/A3; 第1位的值为N对R求余
例子:
10进制数219转为6进制
i:先确认有多少位。
6的一次方 61=6<219
6的平方 6*6=36<219
6的3次方6*6*6=<219
6的4次方 6*6*6*6=1296>219
所以确认最大位数为3
ii: 求第3位的值: 219/(666)=1
第2位为:(219-666)/(66)=0
第1位为:219%6=3
最终结果为:103