大數乘法後結果有幾個零以及最後乙個不是零的數是多少

2021-08-19 14:25:44 字數 1146 閱讀 8348

兩個數相乘後怎麼看最後有沒有零?如果某個乘數自己就帶有零,這個相乘後肯定也有零,那麼想下怎樣能產生零,2*5,4*5,6*5,8*5,這些可以產生零,那麼是不是後面三個可以這樣寫:2*2*5,((2*2*2*2)%10)*5,2*2*2*5,這種情況下都是後面相乘後多出乙個零,如果有n個2*5,那麼就多出了n個零 。

可能看完這些還是有點懵逼,但是看例項就好懂了,比如50*40,我們可以把兩個數拆成5*10*2*2*10,整理一下成了5*2*2*100,出現了一對2*5,所以在原有相乘有兩個零的基礎上我們又得多加上乙個零,再比如25*16,可以拆成5*5*2*2*2*2,在原有零個零的基礎上多了兩對2*5,最後相乘就有0+2個零。

總而言之,就是先把兩個數的最後0位取掉,然後進行拆分,不斷/2,並加以標記,不斷/5,並加以標記。最後看下形成了幾對2*5,結果加上,把最後一位再乘上多除掉的2的倍數或5.

這個東西還經常出,此前藍橋杯出過,這次高校聯盟第13場b題又出來了。

再看看**:

#include#includeusing namespace std;

int a[4]=;//2的倍數的個位只有四種情況,(2^4)%10=6,(2^1)%10=2,(2^2)%10=4,(2^3)%10=8

int main()

int ans=1,temp1=0,temp2=0,res=0;//ans記錄最後乙個不為零的數,res記錄結果有多少零

for(int i=0;i<2;i++)

while(s[i]%2==0)

while(s[i]%5==0)

ans=(ans*s[i])%10;

}int cnt=0;

if(temp1>temp2)

if(temp1掌握這個後,就可以算乙個很大的階乘後最後乙個不為零的數,因為進行拆分後必然2的個數比5的個數多,可以打表進行證實。

#include#includeusing namespace std;

int a[4]=;

int main()

while(t%2==0)

while(t%5==0)

ans=(ans*t)%10;

}if(cnt)

printf("%d\n",ans);

}return 0;

}

大數加法,大數乘法

include include include typedef struct node pnode 函式宣告 int multiply char strmultipliera,char strmultiplierb,char strrst pnode initlist char strmultipl...

大數問題 大數加法 與 大數乘法 最簡單大數乘法

大數加法很簡單,大叔乘法只是以大數加法為基礎的,光從難度來說,兩者差不多。先舉乙個簡單的例子 所以乘法就是每一位個位數相乘再乘以多少次方就可以了,這個多少次就是兩者的陣列位置的索引相加。看看關鍵 for int i 0 i alen i else result plus result,c heigh...

分式化簡結果要求 分式化簡的結果有什麼要求?

分式的化簡與求值 分式的有關概念和性質與分數相類似,例如,分式的分母的值不能是零,即分式只有在分母不等於零時才有意義 也像分數一樣,分式的分子與分母都乘以 或除以 同乙個不等於零的整式,分式的值不變,這一性質是分式運算中通分和約分的理論根據。在分式運算中,主要是通過約分和通分來化簡分式,從而對分式進...