題目描述:對於乙個十進位制數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 以內的...