世界上最涼的事情是什麼呢,是你明明想到了卻做不出來
剛剛在做藍橋杯的練習題,16進製制轉到8進製
一下子就想到了把16轉換成2再轉換成8的方法,然後也寫出來了,但是只在小的範圍內是正確的,自己也不知道是**出了問題,十分涼涼
題目如下
問題描述
給定n個十六進製制正整數,輸出它們對應的八進位制數。
輸入格式
輸入的第一行為乙個正整數n (1<=n<=10)。
接下來n行,每行乙個由09、大寫字母af組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進位制正整數。
【注意】
輸入的十六進製制數不會有前導0,比如012a。
輸出的八進位制數也不能有前導0。
樣例輸入239
123abc
樣例輸出
714435274
【提示】
先將十六進製制數轉換成某進製數,再由某進製數轉換成八進位制。
我的錯誤**
#include#include#includeusing namespace std;
void toeight(char* b, int n)//2進製轉換成8進製
else if (i - 1 >= 0)//最後剩不到3位的2種情況
else
}if (s.top() == 0)
s.pop();//第一位是0的不輸出
while (!s.empty())
cout << endl;
}void totwo(string a)
} toeight(b, a.size()*4);
}int main()
}}
此處是別人ac的**
#include #include #include using namespace std;
int fib(int n)//計算2的多少次方
} string str[11];
int two[400008];//因為16進製制的位數不超過100000,所以換成二進位制數字數不超過400000
int main()
} else
} }//到目前為止把16進製制轉成了二進位制
int count=0;//二進位制數三位一組來轉化為8進製
int sum=0;//連續三位二進位制數的值
stackq;
for(j=4*str[k].length()-1;j>=0;--j)//從two陣列的存數的最大下標開始處理,每三個為一組,轉化為8進製,儲存在棧中
} int sum1=0;//考慮處理的末尾,可能最後一組少於3個,有可能是乙個,也可能是兩個,單獨處理,單獨輸出
int c=0;
for(int m=4*str[k].length()%3-1;m>=0;--m)//4*str[k].length()%3判斷還剩下幾個
if(sum1!=0)
cout<
(博主的部落格)
這個博主的同學還寫了一種更簡潔的,我覺得很巧妙,感興趣的可以自己看一下。
哈哈,時隔不久,我就把bug調出來了
#include#include#includeusing namespace std;
void toeight(string b)
if (s.top() == 0)
s.pop();
while (!s.empty())
cout << endl;
}void totwo(string a)
} toeight(b);
}int main()
}}
嗯就是很開心,感謝綠色的小熊給我的幫助 藍橋杯 進製轉換
一 十六進製制轉八進位制 問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制 數長度不超過100000。輸出格式 輸出n行,每行為輸入對...
藍橋杯進製轉換
問題描述 我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置的 值減 為指數,以 為底數的冪之和的形式。例如 可表示為 這樣的形式。與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置的 值 為指數,以 為底數的冪之和的形式。一般說來,任何...
藍橋杯 進製轉換
問題描述 編寫函式將十進位制整數按8進製輸出,然後編寫main函式驗證該函式。例如輸入12,則輸出為 12 014,輸入32,則輸出32 040。輸入格式 輸入乙個整數。輸出格式 輸出這個整數的八進位制形式。方法使用除基取餘法。利用陣列,將每次除基取的餘數儲存在陣列中,注意最後資料輸出的陣列下標。i...