當前位置:首頁 » 編程語言 » c語言怎麼轉換成八進制的數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎麼轉換成八進制的數

發布時間: 2023-01-31 18:01:04

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;
}

Ⅱ 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語言十六進制轉換為八進制

手工還是編程?
手工可以這樣:把16進制數從左至右按16進制各位上的「數」代表的二進制依次寫出來,比如0x9B8D7F6543D為,再從右至左每3位分開(最左端不足3位時在前面用0補齊)010,011,011,100,011,010,111,111,101,100,101,010,000,111,101。最後用八進制符號對應寫出來就可以了——233432775452075。十六進制數0x9B8D7F6543D的八進制就是233432775452075!
//#include "stdafx.h"//vc++6.0加上這一行.
#include "stdio.h"
#include "string.h"
void dtob(char *p,int n){
static i=0;
if(n) dtob(p,n/2);
if(n) p[i++]=n%2+'0';
}
int dtoo(char *p){
int x,i,k=strlen(p)%3;
for(x=i=0;i<k;(x*=2)+=p[i++]-'0');
for(;p[i];i+=3)
(x*=10)+=((p[i]-'0')<<2)+((p[i+1]-'0')<<1)+p[i+2]-'0';
return x;
}
void main(void){
int n;
char a[33]="";
printf("Type a hexadecimal number...\nn=0x");
scanf("%X",&n);
dtob(a,n);
printf("The binary is %s.\n",a);
printf("The octal %d.\n",dtoo(a));
}

Ⅳ 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);

}

(4)c語言怎麼轉換成八進制的數擴展閱讀:

一、二進制數轉換

二進制數轉換成十進制數

由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然後按十進制加法規則求和。這種做法稱為"按權相加"法。例1105把二進制數110.11轉換成十進制數。

二、十進制數轉換為二進制數

十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合並。

1、十進制整數轉換為二進制整數十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,

如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。

2、十進制小數轉換為二進制小數

十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。

然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。

Ⅳ 用c語言編程把一個十進制數轉化為八進制數

先將十進制數轉換為二進制數,然後就是從低位開始,每三位對應一位,不足補0
比如-32的代碼是10101110(隨便寫的)
轉換之後就是256,前面一個不足三位,在最前面補0
010
101
110
2
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語言進行十進制和八進制的轉換怎麼做

如果輸入是十進制字元串,輸出是八進制字元串,則用如下dec2oct函數可實現轉換

#include<stdio.h>

intdec2oct(char*dec,char*oct){
intnum=0,i=0,t;
charc;
do{
c=*dec;
if(!c)return0;//出錯了,沒找到10進制數
if(c>='0'&&c<='9')break;//找到十進制數了
elsedec++;
}while(1);
do{
num=num*10+(c-'0');
c=*++dec;
if(!c)break;//沒有其他字元了
if(c>='0'&&c<='9')continue;//還有十進制字元,繼續
elsebreak;//沒有其他十進制字元了,退出
}while(1);
do{
t=num%8;
oct[i]=t+'0';
num=num/8;
if(num==0)break;
i++;
}while(1);
for(t=(i+1)/2;t<=i;t++){
num=oct[t];
oct[t]=oct[i-t];
oct[i-t]=num;
}
oct[i+1]='';
return1;
}
intmain()
{
chardec[20],oct[20];
while(scanf("%s",dec)==1)
if(dec2oct(dec,oct))printf("%s ",oct);
elsebreak;
return1;
}

該函數dec2oct先將輸入字元串中的10進制字元串轉換成二進制數存下來,然後再將二進制數轉換成八進制字元串。

Ⅷ C語言中進制的表示和轉換

C語言中常用的有十進制、二進制、八進制(用0表示)、十六進制(用0x表示)。

十進制轉二進制:

十進制轉二進制採取除於2取余的方式。

將十進制數除於2得到商和余數,

將商繼續除於2一直到商為0,

將得到的余數倒敘排列就是轉換為二進制的結果

二進制轉十進制:

從右向左用二進制位上的每一個數乘以2的相應次方

如二進制1010轉換為十進制:

1010 = 0*(2的0次方)+1*(2的1次方)+0*(2的2次方)+1*(2的3次方) = 2 + 8 = 10

八進制轉換為二進制

將二進制數自右向左每三位分為一段(若不足三位用0補齊),

然後將二進制的每三位轉換為一位八進制數

如將二進制數0101010轉換為八進制:

0 101 010不夠三位的補0得到

000 101 010 = 052 = 0052(八進制用0表示)

十六進制轉換為二進制

將二進制數自右向左每四位分為一段(若不足三位用0補齊),

然後將二進制的每4位轉換為一位十六進制數

如將二進制數0101100轉換為十六進制:

010 1100不夠三位的補0得到

0010 1100 = 2C= 0x2C(十六進制用0x表示)