當前位置:首頁 » 編程語言 » 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;
}