A B 問題 尾部的0

2021-08-14 21:47:22 字數 1436 閱讀 8797

題目一:給出兩個整數a和b, 求他們的和, 但不能使用+等數**算符。

**:int aplusb(int a, int b)

else}

看到題目第一反應就是一臉茫然,計算加法不能用加號?emmmm首選度娘,然後我見到了位運算。

嗯,從來沒學過的位運算。

這道題目主要用的是與運算&、異或運算^,左移一位<<1

以簡單為例:0011+1001

無進製的運算是1010,通過^運算實現

進製是0001,通過&運算實現

加法是本位相加再加上低位的進製,所以運算是1010+0010

0010由0001左移一位實現

當進製為0時,運算結束

我理解的思路大致如此。

emmmm中途也有點小失誤的說,因為我不小心把左移打成右移,使得通過率只有44%,還以為做100+(-100)時還要把(-100)求補碼(實際上就是100)再運算,當成減法了,很尷尬。

題目二:設計乙個演算法,計算出n階乘中尾部零的個數

**:long long trailingzeros(long long n)

return num;

}講真,這個題目我做的內牛滿面。首先我考慮的是計算階乘的結果,然後用這個結果不斷除以10,計算0的個數,然後很榮幸的卡在了165這個數字上,結果太大了,找度娘,學了高精度計算階乘,然後又卡在了1001171717上,後來我想每除一次10就把資料分別向前移一位,但是並沒有什麼用,光是末尾0的個數就有250292920個,現在很明顯思路是完全錯了

錯**如下:

long long trailingzeros(long long n)

for(q = 0;f[q] == 0;q++)//記錄每一次乘法以後末尾0的個數

for(q = sum1;q<2000;q++)

}//得到的f陣列就是階乘的結果(由低位向高位排列)

return sum;

} 後來看到有大佬們用分解因子分解資料,沒完全看懂。我的思路是計算每個資料的2的因子的個數,然後把2按個數寫入陣列,再計算

5的個數,按個數把5寫入陣列,當前兩個資料相乘為10,前兩個元素從陣列中刪除,計數器加一,嗯,同樣的問題,1001171717資料太大,陣列越界。

錯**如下:

long long trailingzeros(long long n)

else if(temp%5 == 0)//i被5整除

else

if(stack[top]*stack[top-1]==10)//棧頂以及其後乙個元素相乘為10

if(top >= 20000000-1)

return num;

}emmmm,雖然思路錯了兩次但是還是有些收穫的,學會了高精度計算階乘演算法,還有之前的位運算,打算有時間整理一下。同時我發現我的思維過於僵化,還是有點死腦筋,如果早一些想到正確的思路就不用浪費好幾個小時琢磨了,哭哭。

階乘尾部的0

挑戰 首先我們不考慮時間複雜的解決思路是先求出 n 的階乘,然後再計算 n 階乘尾部 0 的個數。如下 public long trailingzeros long n 求尾部 0 的個數 while arg 10 0 result arg 10 return result 時間複雜度為 o n 那...

階乘尾部0的個數

輸入 輸入資料有若干行,每行上有乙個非負整數n,對應一種情形。輸出 對於每一種情形,直接輸出結果 換行。樣例輸入816 30樣例輸出13 7方法一 令f x 表示正整數x末尾所含有的 0 的個數,則有 當0 n 5時,f n 0 當n 5時,f n k f k 其中 k n 5。include in...

python 刪除尾部0 初學python的小心得

之前曾在datacamp系統地學習過r,學習python的時候多少有些熟悉感,不過兩種不同的語言還是有挺多不同,接下來記錄一下新學的知識和踩過的雷 python大小寫敏感,需注意命令的縮排 集合 不包含重複元素,會自動刪除重複值 集合操作 update 更新,xx.discard 刪除,in 查詢,...