試題 算法提高 計算超階乘
資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
計算1*(1+k)(1+2k)(1+3k)…(1+n*k-k)的末尾有多少個0,最後一位非0位是多少。
輸入格式
輸入的第一行包含兩個整數n, k。
輸出格式
輸出兩行,每行一個整數,分別表示末尾0的個數和最後一個非0位。
樣例輸入
15 2
樣例輸出
0
5
數據規模與約定
1<=k<=10,1<=n<=1000000。
代碼
#include<stdio.h>
int main(){
long long i,n,k,count=1,count1=0;//count1統計0的個數,count統計處理後乘積
scanf("%I64d%I64d",&n,&k);
for(i=0;i<n;i++){
count*=(1+i*k);
while(count%10==0){//去除末尾0並用count1記數
count/=10;
count1++;
}
count%=10000000;//因爲n最大1000000,k最大10所以對10000000取餘可以滿足範圍內任意數據
//但就此題藍橋杯檢測點來說取10000就夠了
}
printf("%I64d\n%I64d",count1,count%10);//按要求輸出
return 0;
}