我用#CSDN#這個app發現了有技術含量的博客,小伙伴們求同去《藍橋杯:(c語言)大數十六進制轉八進制簡易思路》, 一起來圍觀吧 https://blog.csdn.net/zhoujun233/article/details/104654610?utm_source=app
uj5u.com熱心網友回復:
前段時間有人發帖問過這個問題uj5u.com熱心網友回復:
畢竟是藍橋杯題目,,看的人還是比較多的
uj5u.com熱心網友回復:
他這么寫不是很麻煩嘛。。。。這個思路不就是利用二進制完成轉化嘛,四位換成3位。。
uj5u.com熱心網友回復:
我理解中16進制轉8進制應該很簡單啊。uj5u.com熱心網友回復:
emmm,那要怎么寫

?第二次些博客了。有些題目看起來簡單,可實踐起來比較難,這題要求十六進制位數很多位。我之前寫了個用單純用整型加數學方法的代碼。可是提交上去藍橋杯就顯示運行錯誤。求教教我如何寫好一篇好博客
uj5u.com熱心網友回復:
我開始看到這題也是這樣想的,可題目要求這個十六進制的位數很大,不能用數值運算,只能用字串一位一位的運算
uj5u.com熱心網友回復:
挺簡單的題目 怎么你實作這么復雜1位十六進制對應4位二進制
1位八進制對應3位二進制
3位十六進制對應 12位二進制
12位二進制對應 4位八進制
整理一下
3位十六進制對應4位八進制
一個回圈打表
處理的時候 做好對齊分割 掃一圈完事
uj5u.com熱心網友回復:
可是你輸入的一定是3倍數的十六進制嘛?
uj5u.com熱心網友回復:
而且你的碼表是不是有些多呀,3位十六進制有多少數呀!
uj5u.com熱心網友回復:
#include <stdio.h>
int main(int argc, char *argv[])
{
//打表
char table[0x1000][10];
for(int i=0; i<0x1000; ++i)
sprintf(table[i], "%04o", i);
//輸入 預留偏移以便對齊
char strSrc[1024] = "000";
scanf("%s", strSrc + 3);
//輸出 計算對齊
int nlen = strlen(strSrc + 3);
for(char* pstrSrc = strSrc + nlen % 3; *pstrSrc; pstrSrc+=3)
{
int nTmp = 0;
sscanf(pstrSrc, "%3x", &nTmp);
printf("%s", table[nTmp]);
}
puts("");
return 0;
}
uj5u.com熱心網友回復:
多少位重要嗎?加宣告陣列在內 3行代碼的事
uj5u.com熱心網友回復:
沒怎么雕琢 最開始會有多余0的現象小問題 沒做處理
理解代碼 不要生搬硬套
uj5u.com熱心網友回復:
字串存就行,管它多少位呢,有二進制的思想,打表?判就簡單了uj5u.com熱心網友回復:
沒怎么雕琢 最開始會有多余0的現象
#include <stdio.h>
int main(int argc, char *argv[])
{
//打表
char table[0x1000][10];
for(int i=0; i<0x1000; ++i)
sprintf(table[i], "%04o", i);
//輸入 預留偏移以便對齊
char strSrc[1024] = "000";
scanf("%s", strSrc + 3);
//輸出 計算對齊
int nlen = strlen(strSrc + 3);
for(char* pstrSrc = strSrc + nlen % 3; *pstrSrc; pstrSrc+=3)
{
int nTmp = 0;
sscanf(pstrSrc, "%3x", &nTmp);
printf("%s", table[nTmp]);
}
puts("");
return 0;
}
小問題 沒做處理
理解代碼 不要生搬硬套
這個我剛剛查了下,百度,的確這樣更簡單。c函式庫沒有學,不會用

uj5u.com熱心網友回復:
有沒有什么好的教學視頻,,打表我不會,c函式庫一個都不會
uj5u.com熱心網友回復:
有沒有什么好的教學視頻,,打表我不會,c函式庫一個都不會
做題多了接觸多了自然知道了
這里不知道 sprintf/sscanf 問題不大
無非是手寫 int轉4位八進制字串 / 3位十六進制字串轉int
打表這個記一下用兩下就懂了
算是一種基礎資料結構
后面學資料結構 演算法之類的課程會接觸到
uj5u.com熱心網友回復:
犧牲空間換時間,打表可以大幅度提高效率3個16進制 = 4個八進制
這對很長的資料來說,很有優勢
3個16進制才多少位啊, 12bits, 最大值也不過4096吧,這點記憶體開銷不算什么
uj5u.com熱心網友回復:
犧牲空間換時間,打表可以大幅度提高效率
3個16進制 = 4個八進制
這對很長的資料來說,很有優勢
3個16進制才多少位啊, 12bits, 最大值也不過4096吧,這點記憶體開銷不算什么
嗯,學到了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/125666.html
標籤:C語言
上一篇:有沒有大佬對cmake比較熟悉的。幫忙看一下。這是CMake的一個bug嗎?
下一篇:求解程式題
