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...