九度 題目1208 10進製 VS 2進製

2021-06-26 16:50:47 字數 1255 閱讀 2983

題目描述:對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。

例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。

輸入:乙個1000位(即10^999)以內的十進位制數。

輸出:輸入的十進位制數的二進位制逆序數。

樣例輸入:

173

樣例輸出:181

以上是題目的敘述!初看這道題覺得此題很簡單,以為水題一道!但是真正做的時候卻錯誤百出!最終花了我3個小時才最終搞定!

我的思路是分兩步:1.將十進位制數轉換成2進製數;

2.將2進製旋轉的數轉換成新的十進位制數;

因為題目中說輸入不超過1000位,可以得出這是大整數的操作!然後第一步就是將大整數轉換成2進製數,這一步很簡單,只要大整數末位迴圈取餘2,將結果儲存在新的字元陣列中即可!此時得到的2進製數已經相當於是反轉過的2進製數了,然後再怎麼將其轉換成新的十進位制數呢?不能用常規的每位的數乘以此數的位數,這樣的話2^n有可能是溢位的,因為是大整數啊!所以只能迴圈每一位都乘2,再將結果繼續每位都乘2。。。

具體演算法如下:

#include

#include

char ch1[1000],ch2[4000]; //ch1儲存使用者輸入的10進製大整數,ch2儲存ch1轉換後的翻轉的2進製

int num[1000];//儲存ch2轉換的新的2進製大整數!

void ten_two_convers()else

if(a%2 == 0)else

sum = sum + a/2;}}

}int two_ten()else

}for(int j = 0; j < len2; j++)else if(num[j] >= 10)}}

return len2;

}int main()

printf("\n");

}return 0;

}

到此這道題完成!!!!!!

九度OJ 1208 10進製 VS 2進製

本題使用了寫好的高精度整數的模板,將ten2n 函式的輸出方式稍微改了改。debug過程 過載的 運算通過這道題發現了bug 當輸入的int x為0時,由於使用的是bigint與int逐位乘的演算法,故若bigint的intsize不為1的話,會return乙個值為0但intsize 0的bigin...

65 題目1208 10進製 VS 2進製

題目描述 對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。輸入 乙個1000位 即10...

10進製VS2進製

對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。乙個1000位 即10 999 以內的...