迅雷有這么一道筆試題,編程計(jì)算2的1024次方。
所謂2的1024次方,就是有1024個(gè)2相乘,于是有些同學(xué)順手就能寫出代碼:
int main() { int reslut = 1; for(inti=0;i1024;?i++) ????{ ????????result *= 2; ????} ????printf("%d ", result); return 0; }如果你也這樣寫代碼,那簡(jiǎn)歷上頂多能寫了解C語(yǔ)言,離掌握和精通還差很遠(yuǎn)。
C語(yǔ)言中的int類型一般占4字節(jié),4個(gè)字節(jié)就是32位二進(jìn)制,即使是無(wú)符號(hào)數(shù),能表示的最大數(shù)字也就是2的32次方減一,離2的1024次方還差很遠(yuǎn)。
所以單純的用整數(shù)來(lái)保存結(jié)果肯定不行。
一種辦法是當(dāng)作字符串來(lái)處理,模擬乘2進(jìn)位的方法。
來(lái)一個(gè)數(shù)組,數(shù)組盡量大一些,初始化成1,乘以2的結(jié)果分別是2 4 8。

再乘以2的時(shí)候,結(jié)果是6并且向后進(jìn)一位。

再比如64,4乘以2等于8,不用進(jìn)位,6乘以2等于2,向后進(jìn)一位。

最終得到的字符串來(lái)個(gè)逆序就行。
這種辦法不僅能計(jì)算2的1024次方,再大一些,問題也不大。
代碼直接貼上,需要的話可以暫停下看看。
#include在??偷呐判邪裆?,速度最快,占用空間最小的并不是這種解法。#include void reverse(char *r) { int length = strlen(r); int i; char ch; for (i = 0; i < length / 2; i++) { ch = r[i]; r[i] = r[length - 1 - i]; r[length - 1 - i] = ch; } } void NPowerOfTwo(int n, char *res) { int i, length, j, num, carry; for (i = 0; i < n; i++) { carry = 0; for (j = 0; j < strlen(res); j++) { num = res[j] - '0'; num = (num << 1) + carry; carry = num / 10; res[j] = num % 10 + '0'; } if (carry > 0) res[j] = carry + '0'; } reverse(res); } int main( ) { int n; charresult[2048]={'1'}; NPowerOfTwo(1024,result); printf("%s ", result); return 0; }
int類型雖然不好表示這么大的數(shù),但是C語(yǔ)言中還有一種long double類型,具體的長(zhǎng)度不同的編譯器可能略有不同,10字節(jié)、12字節(jié)、16字節(jié)都有。
我用的Ubuntu環(huán)境,long double類型確實(shí)能解決2的1024次方。
int main() { long double reslut=1.0; for (int i = 0; i < 1024; i++) { result *= 2.0; } ????printf("%.0Lf ",?result); return 0; }
審核編輯:劉清
-
處理器
+關(guān)注
關(guān)注
68文章
19869瀏覽量
234562 -
二進(jìn)制
+關(guān)注
關(guān)注
2文章
807瀏覽量
42282 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7631瀏覽量
141209 -
字符串
+關(guān)注
關(guān)注
1文章
590瀏覽量
21267 -
模擬器
+關(guān)注
關(guān)注
2文章
894瀏覽量
44277
原文標(biāo)題:計(jì)算2的1024次方
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
二次方程式編程求助
在labview中怎樣將三次方開出,正負(fù)都有
數(shù)組更新現(xiàn)在只能計(jì)算第一次的,該如何計(jì)算之后的呢?
請(qǐng)教DSP關(guān)于8次函數(shù)的計(jì)算問題
請(qǐng)問乘積超過(guò)2的32次方怎么處理?
計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)
魔方超級(jí)計(jì)算機(jī)應(yīng)用環(huán)境
九次方牽手湖北廣電 建大數(shù)據(jù)應(yīng)用示范基地
九次方大數(shù)據(jù)聯(lián)手徐州國(guó)投 共建大數(shù)據(jù)公司
改進(jìn)的四次方功率譜的調(diào)制信號(hào)載波頻率估計(jì)

PLC和運(yùn)動(dòng)控制器如何通過(guò)一條5次方曲線

評(píng)論