C語言的十進位制數轉換八進位制演算法有哪些

2022-03-05 10:43:41 字數 6177 閱讀 6850

1樓:可旎瑞茂才

原發布者:血戰長空wlg

題目:數制轉換問題1.需求分析將十進位制數n轉換成八進位制數是計算機實現計算的基本問題,解決方案很多,其中最簡單的方法是除8取餘法。

1)本方案採用順序棧的方式模擬整個過程。其原理如下:例子:

(1348)10=(2504)8nndiv8nmod8134816841682102125202從中可以看出,最先產生的餘數4是轉換加過的最低位,這正好符合棧的「後進先出」的特性。2)功能:從鍵盤輸入任意一個非負十進位制整數,輸出與其等值的八進位制數;若輸入一個負數,則顯示輸入錯誤,請重新輸入。

3)測試資料:(1348)10=(2504)8,(0)10=(0)8,(-1234)10輸入資料錯誤。2.

概要設計定義順序棧型別,由鍵盤輸入非負十進位制整數n,執行以下迴圈操作:n%8入棧,n=n/8,直至n=0。主要函式由建立空棧initsqstack()、入棧push()、出棧pop()和main()函式組成。

過程中函式呼叫關係圖如下:3.詳細設計1)資料型別定義structsqstack;2)系統主要子程式詳細設計a.建立空棧intinitsqstack(sqstack&s){s.

bottom=(int*)malloc(sizeof(int)*20);if(s.bottom){s.top=s.

bottom;

2樓:幸運的小李菲刀

方法一:直接使用控制字串    %o 八進位制%x方法二:

求餘來算,比如求十進位制數 x(x>100) 的8進位制,先通過 x%8 可以得到個位(末位)上的數,當十進位制數等於8時,必然會進位,求餘的結果正好是不能進位的部分,x=x/8(這就像位移,x的8進位制數向右移了一位),這樣已經求出來的 個位 位移後沒有了,原來的十位變成了個位,繼續把得到的x按上面的方式求末位,就能求出來十位,按照這種方式得到的 8進位制數 是反的(先得到個位,再十位。。。),這樣很適合放到棧中,取得時候又會反過來,偽**可以這樣寫:

while(x)lnode,*lstack;

lstack pushstack(lstack top,int x)lstack p;

p=(lstack)malloc(sizeof(lnode));

if((x)!=-1)

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("請輸入原數及要轉換的進位制:");

dowhile(x>35||x<0||n<2);

while(x)

3樓:風風風姬姬姬

#include

int main()

printf("輸入一個十進位制數:");

int num1,num2=0,i=0;

scanf("%d",&num1);

while(num1)

int temp = num1%8;

for(int j=0;jtemp *= 10;

num1 /= 8;

i++;

num2 += temp;

printf("轉為八進位制為:%d\n",num2);

return 0;

#include

void dec2oct(int x)

{if(x>1)dec2oct(x/8);

printf("%d",x%8);

int main()

{int x;

scanf("%d",&x);

dec2oct(x);

return 0;

c語言 十進位制數轉換八進位制 演算法

4樓:幸運的小李菲刀

方法一:直接使用控制字串    %o 八進位制%x方法二:

求餘來算,比如求十進位制數 x(x>100) 的8進位制,先通過 x%8 可以得到個位(末位)上的數,當十進位制數等於8時,必然會進位,求餘的結果正好是不能進位的部分,x=x/8(這就像位移,x的8進位制數向右移了一位),這樣已經求出來的 個位 位移後沒有了,原來的十位變成了個位,繼續把得到的x按上面的方式求末位,就能求出來十位,按照這種方式得到的 8進位制數 是反的(先得到個位,再十位。。。),這樣很適合放到棧中,取得時候又會反過來,偽**可以這樣寫:

while(x)lnode,*lstack;

lstack pushstack(lstack top,int x)lstack p;

p=(lstack)malloc(sizeof(lnode));

if((x)!=-1)

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("請輸入原數及要轉換的進位制:");

dowhile(x>35||x<0||n<2);

while(x)

5樓:人生總在糾結

這個很簡單的,用棧的先進後出原則;

void conversion(){

initstack(s);

scanf(「%d「,n);

while(n){

push(s,n%8);

n=n/8;

}while(!stackempty(s)){pop(s,e);

printf(「%d」,e);}}

6樓:匿名使用者

int a;

unsigned buf[5];

sscanf(a,"%02x",&buf[2]);//這是10進位制轉換成16進位制,結果在buf裡。

同理,10進位制轉八進位制只要把"%02x"換成8進位制的就可以了

7樓:xyboys李星宇

#include

int main()

8樓:匿名使用者

#include

int main()

printf("轉為八進位制為:%d\n",num2);

return 0;}

9樓:

#include

void main ( )

希望能夠幫到你!

10樓:慕蕙昀

這個多麼容易哈。

#include

void main ( )

祝你好運~_~

11樓:毓人

(123)10

=(((0*1010+1)*1010+10)*1010+11)2=((1*1010+10)*1010+11)2=((1010+10)*1010+11)2=(1100*1010+11)2

=(1111000+11)2

=(1111011)2

=(001 111 011)2

=(173)8

(173)8

=(((0*8+1)*8+7)*8+3)10=((1*8+7)*8+3)10

=((8+7)*8+3)10

=(15*8+3)10

=(120+3)10

=(123)10

c語言程式十進位制的數轉換成八進位制的數

12樓:楓橋映月夜泊

c語言程式十進位制的數轉換成八進位制的數的辦法:

#include

#include

void main()

printf("八進位制輸出sum:%d",sum);}

13樓:

#include

int main()

14樓:匿名使用者

先10轉2 再轉8,16進位制。8,16轉2再轉10進位制。

比如:八進位制:63 ->二進位制:110(6) 011(3) -> 十進位制:32+16+2+1 = 51

十六進位制:a5 ->二進位制:1010(a) 0101(5) -> 十進位制:128+32+4+1 = 165

十進位制 19 ->二進位制 1 0011 -> 八進位制: (010 011) = 23

-> 十進位制:(0001 0011) = 13通過二進位制之後 會簡單多了,希望對你有幫助。

15樓:聽不清啊

#include

void dec2oct(int x)

int main()

16樓:汪好帥

#include

#include

void main()

printf("八進位制輸出sum:%d",sum);}

17樓:匿名使用者

??????????????

c語言「把十進位制數轉換成八進位制數」怎麼寫

18樓:流星不死

#include

#include

main()

for(i=0;s;i++)//10進位制轉你想要的進位制b[i]='\0';

for(i=strlen(b)-1;i>=0;i--)printf("%c",b[i]);

}這是任意進位制的轉換 望滿意

19樓:賈桂枝晉琴

c語言程式十進位制的數轉換成八進位制的數的辦法:

#include

#include

void

main()

printf("八進位制輸出sum:%d",sum);}

20樓:花花浪客

寫一個遞迴函式,除8取餘,然後對商進行遞迴一直到商等於0為止

21樓:匿名使用者

用10進位制數除以8,取餘數放到最右邊,繼續除以8,直到餘數為8,之前的餘數都是從右向左輸出,別忘了8進位制數前面都有0,比如20的轉換就是084

22樓:外圓內方的銅錢

#include

int main(void)

; //此陣列存放8位八進位制數

int i; // 累計變數

scanf("%d", &n);

s = n;

for (i=0; s != 0; i++)printf("\t%d的八進位制為:\n\n\t", n);

for (i=7; i>=0; --i)

printf("\n\n");

return 0;}

用c語言的函式呼叫如何將一個十進位制數轉換為八進位制數?

23樓:

**程式功能:求二進位制,十進位制,八進位制

建立人:蒲宇林

建立日期:2023年8月13日

**/#include

void two();

void eight();

void sixteen();

/**主函式**/

void main()

if(select == 0)

}while(1);

}void two()

}printf("轉換為二進位制:"); //列印for(; i >= 0 ; i-- )

printf("\n");

}void eight()

}printf("轉換為八進位制:"); //列印for(; i >= 0 ; i-- )

printf("\n");

}void sixteen()

}printf("轉換為十六進位制:"); //列印for(; i >= 0 ; i-- )

}printf("\n");}

24樓:匿名使用者

10進位制轉換8進位制輸出,使用printf函式的格式輸出%o即可。如果需要得到轉換後的字串,使用sprintf函式即可。

例程:#include

int main ()

十進位制數572轉換為二進位制八進位制十六進位制分別是多少

二進位制 1011000111100 八進位制 13074 十六進位制 163c 1.十進位制 二進位制 對於整數部分,用被除數反覆除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的餘數。另外,所得到的商的最後一位餘數是所求二進位制數的最高位。對於小數部分,採用連續乘以基數...

二進位制八進位制十進位制十六進位制數之間的相互轉

有一個公式 二進位制數 八進位制數 十六進位制數的各位數字分別乖以各自的基數的 n 1 次方,其和相加之和便是相應的十進位制數。個位,n 1 十位,n 2.舉例 110b 1 2的2次方 1 2的1次方 0 2的0次方 0 4 2 0 6d 110q 1 8的2次方 1 8的1次方 0 8的0次方 ...

十進位制負數轉換成二進位制 八進位制 十六進位制希望能在11 10之前解答

十進位制整數轉換為二進位制數的方法 除2取餘 把十進位制數15轉化成二進位制數 15 2 7 餘1 7 2 3 餘1 3 2 1 餘1 1 2 0 餘1 結果 1111 二進位制轉換為八進位制的方法 將二進位制數從右到左,三位一組,高位不夠補0 例 二進位制數1110111011轉換為八進位制數 0...