日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C语言 · 十六进制转八进制

發(fā)布時間:2024/8/26 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 C语言 · 十六进制转八进制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基礎練習 十六進制轉八進制

時間限制:1.0s 內(nèi)存限制:512.0MB

錦囊1:
  使用二進制。

問題描述
  給定n個十六進制正整數(shù),輸出它們對應的八進制數(shù)。

輸入格式
  輸入的第一行為一個正整數(shù)n (1<=n<=10)。
  接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數(shù),每個十六進制數(shù)長度不超過100000。

輸出格式
  輸出n行,每行為輸入對應的八進制正整數(shù)。

  【注意
  輸入的十六進制數(shù)不會有前導0,比如012A。
  輸出的八進制數(shù)也不能有前導0。

樣例輸入
  2
  39
  123ABC

樣例輸出
  71
  4435274

  提示
  先將十六進制數(shù)轉換成某進制數(shù),再由某進制數(shù)轉換成八進制。

作者注釋:正如錦囊和題目提示所說:先將十六進制化成二進制,在每三位一組轉成八進制,不夠位0補之就行了——用數(shù)學方法計算也是這樣嘛,用二進制做“中間人”!

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char h[100002],b[400002],e[400002];
 5 int main(){
 6     int n;
 7     scanf("%d",&n);
 8     while(n--){
 9         scanf("%s",h);
10         int i,len=0;
11         /*先把16進制化成二進制——從后往前展開 */
12         for(i=strlen(h)-1;i>=0;i--){
13             int v;
14             if(h[i]>='0' && h[i]<='9')
15                 v=h[i]-'0';
16             else v=h[i]-'A'+10;
17             for(int j=0;j<4;j++){
18                 b[len++]=v%2+'0';
19                 v/=2;
20             }
21         }
22         b[len]='';
23         int x=0,cnt=1;
24         int l=0;
25         for(i=0;i<len;i++){
26             /*每三位二進制轉成一位8進制,最后不足三位補0*/
27             if(cnt==4||i==len-1){
28                 x=cnt*(b[i]-'0')+x;
29                 cnt=1;
30                 e[l++]=x+'0';
31                 x=0;
32             } else{
33                 x=cnt*(b[i]-'0')+x;
34                 cnt*=2;
35                }
36         }
37         i=l-1;
38         while(i>=0 && e[i]=='0')
39             /*去掉前導0*/
40             i--;
41         if(i<0)
42             printf("0");
43         for (;i>=0;i--){
44             printf("%c",e[i]);
45         }
46         printf("
");
47     }
48     return 0;
49 }

總結

以上是生活随笔為你收集整理的C语言 &#183; 十六进制转八进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。