C語言實現藍橋杯 算法提高 計算超階乘

試題 算法提高 計算超階乘

                                                                                  藍橋杯試題解答彙總鏈接

資源限制

       時間限制: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章