当前位置:首页 » 编程语言 » c语言转换为八进制
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言转换为八进制

发布时间: 2023-06-13 03:01:40

c语言 十进制数转换八进制 算法

  1. 方法一:直接使用控制字符串 %o 八进制%x

  2. 方法二:

    求余来算,比如求十进制数 x(x>100) 的8进制,先通过 x%8 可以得到个位(末位)上的数,当十进制数等于8时,必然会进位,求余的结果正好是不能进位的部分,x=x/8(这就像位移,x的8进制数向右移了一位),这样已经求出来的 个位 位移后没有了,原来的十位变成了个位,继续把得到的x按上面的方式求末位,就能求出来十位,按照这种方式得到的 8进制数 是反的(先得到个位,再十位。。。),这样很适合放到栈中,取得时候又会反过来,伪代码可以这样写:

    while(x){

    printf("%d",x%n);//会打印出x转换为 N进制数 从低位到高位上的每一位数

    x/=n;

    }

  3. 十进制转换N进制:

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    typedef int INT;

    typedef struct dd

    {

    INT data;

    struct dd *next;

    }LNode,*LStack;

    LStack pushstack(LStack top,int x)

    {

    LStack p;

    p=(LStack)malloc(sizeof(LNode));

    if((x)!=-1) {p->data=(x); p->next=top; top=p;}

    return top;

    }

    LStack outstack(LStack top,int *x)

    {

    LStack p=top;

    *x=p->data;

    top=p->next;

    free(p);

    return top;

    }

    main()

    {

    int x,n;

    LStack top=NULL;

    printf("请输入原数及要转换的进制:");

    do{

    scanf("%d%d",&x,&n); //输入一个十进制数和要转换的进制,比如3 2 得到1 }while(x>35||x<0||n<2);

    while(x){ //这个循环把每一位放到栈中

    top=pushstack(top,x%n);

    x/=n;

    while(top!=NULL)

    {

    top=outstack(top,&x);

    if(x<10)

    printf("%c",x+'0');

    else

    printf("%c",x+'A'-10);

    }

    return 0; }

② c语言十进制转换为八进制

#include<stdio.h>

void main()

{

char *p,s[6];int n;

p=s;

gets(p);

n=0;

while(*(p)!='')

{n=n*8+*p-'0';

p++;}

printf("%d",n);

}

(2)c语言转换为八进制扩展阅读:

一、二进制数转换

二进制数转换成十进制数

由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。例1105把二进制数110.11转换成十进制数。

二、十进制数转换为二进制数

十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。

1、十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,

如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

2、十进制小数转换为二进制小数

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

③ C语言如何把十六进制转换成八进制

此题涉及到大数据处理(输入的16进制数最大可能到100000位),所以不能用常规的除8模8方法做,思路:

  1. 先将十六进制转为二进制表示

  2. 再将二进制转换为八进制表示,然后输出

具体程序实现如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*将十六进制字符转换为数值*/
intget_value(constcharc)
{
if(c>='0'&&c<='9')
returnc-'0';
else
returnc-'A'+10;
}

intmain()
{
char*input,*output,*output2,*ptr;
intn,i,j,tmp,len;

scanf("%d ",&n);
input=(char*)malloc(100000+1);/*储存输入的十六进制数*/
output=(char*)malloc(100000*4+4);/*储存过度用的二进制数*/
output2=(char*)malloc(100000*3+3);/*储存最终结果八进制数*/

while(n--)
{
gets(input);
len=strlen(input);
ptr=input;
j=0;
/*首先将十六进制转换为二进制,1位十六进制数对应4位二进制数*/
while(*ptr)
{
tmp=get_value(*ptr);
output[j++]=((tmp>>3)&0x1);/*bit3*/
output[j++]=((tmp>>2)&0x1);/*bit2*/
output[j++]=((tmp>>1)&0x1);/*bit1*/
output[j++]=((tmp>>0)&0x1);/*bit0*/
ptr++;
}

/*将二进制转换为八进制,3位二进制数对应1位八进制数,从低位开始转*/
/*j为二进制数组下标,每个循环减3*/
/*i为八进制数组下标,每个循环减1*/
j=len*4-1;
i=(len*4+2)/3-1;
output2[i+1]='';
for(;j>=0;)
{
if(j>=2)
output2[i--]=(output[j-2]<<2|output[j-1]<<1|output[j])+'0';
elseif(j==1)
output2[i--]=(output[j-1]<<1|output[j])+'0';
elseif(j==0)
output2[i--]=output[j]+'0';

j-=3;
}
/*八进制数组的有效下标从i+1开始*/
j=i+1;
/*去除前导的'0'字符(可能会影响判定结果)*/
while(output2[j]=='0')j++;
/*如果整个字符串都是'0',则直接输出结果'0',否则从首位非'0'开始输出*/
if(output2[j]=='')
printf("0 ");
else
printf("%s ",&output2[j]);
}

free(input);
free(output);
free(output2);

return0;
}

④ C语言二进制数转换为八进

2的三次方是8,所以可以看成三位二进制数为一位八进制数。态桥
比如没唯:110001(2)=61(8)
二进制转为八进制:你把枯闭培三个二进制位转为一个八进制位就可以了
101 110 = 5 6

⑤ c语言“把十进制数转换成八进制数”怎么写

#include<stdio.h>
#include<string.h>
main()
{
inti,m,n,s=0,t=1;chara[100],b[100];
gets(a);//用回车分割
scanf("%d%d",&n,&m);//输入的进制和想要转换的进制
for(i=strlen(a)-1;i>=0;i--)//先转10进制
{ if(n!=16)
s+=(a[i]-48)*t;
else
s+=(a[i]-55)*t;
t*=n;
}
for(i=0;s;i++)//10进制转你想要的进制
{
if(s%m>=10)
b[i]=s%m+55;
else
b[i]=s%m+48;
s/=m;
}
b[i]='';
for(i=strlen(b)-1;i>=0;i--)
printf("%c",b[i]);
}

这是任意进制的转换 望满意

⑥ 用C语言把十进制转换为8进制,最好用栈结构

用系统栈(递归)实现转换的函数:
系统递归函数在调用时,如果输出语句是在调用语句的后面时念搜,则输出部分是放入系统栈中的(须等到递归调用返回时,才轮到输出语句的执行)。使用递归函数的优点是程序编写简单,压栈与退栈操作由系统完成,特别适合于问题本身具有递归仔握历的特点。缺点是效率上比非递归的要差些。
#include<stdio.h>
void dec2oct(int x) //将十进制数x转化为8进制数输出
{if(x>7)dec2oct(x/8); //如果 x 不止一位8进制数,则先处理其高位部分
printf("%d",x%8); //递归返回时再输出 x 的最低位
}
int main()
{int x;
scanf("%d",&x); /皮缺/读入要转换的十进制数x
dec2oct(x); //将 x 转换为8进制数输出
return 0;
}

⑦ 在C语言中如何把十进制数变成八进制数

不知道你要的是那种,是自己换算吗?
自己换算的话,用"除8求余数法“
比如(145)
145/8=18 余1
18/8=2 余2
2/8=0 余2
则自下往上取余数就可以了,即221
如果你想让计算机自己转换的话,就像楼上说的办法办就行了,呵呵。祝你好运!

⑧ C语言中字符串如何转换为二进制、八进制、十进制、十六进制

什么意思,?没懂,,,是说转为 2 8 16进制的整数?
只要是整数 int。就只有大小。没有进制的区别。
所谓的进制,只是为了人为识别。
但是可以把整数,转换为响应进制的字符串。
举例
char num[] = "15";
int val = atoi(num); //字符串转为整数

char tem[16] = {};
_itoa(val,tem,2);//整数转为2进制字符串
_itoa(val,tem,8);//8进制
_itoa(val,tem,16);//16进制
_itoa(val,tem,10);

⑨ C语言十进制怎么转换八进制,求详细描述,不要编译器运行的结果

十进制转任意进制一般都是用除基取余法,比如说102转8进制,
102除以8,商12,余6
12除以8,商1,余4
1除以8,商0,余1
商为0的时候即转换完成,将余数逆序连接起来就是结果,即10进制的102转8进制为146
将上述过程转为代码就是
#include <stdio.h>
int main()
{
int number = 102, i=0, div, rem;
int system = 8;//8进制
char s[50];

while (number) //除基取余法
{
div = number / system; //商
rem = number % system; //余
s[i++] = rem <= 9 ? rem + '0' : rem - 10 + 'A';
number = div; //上次的商赋给number
}
for (--i; i >= 0; i--)
printf("%c", s[i]);
printf("\n");

getchar();
return 0;
}