问题描述
资源限制
时间限制: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、数字相乘时,当末尾数字为0时,相当于直接将0作为后缀,因此在逐步计算时,直接计算0的个数,并抹去末尾0。
2、由题意可得,该公式为sum*=(1+i*k) (i=1~n-1)。
解题代码
#include <iostream>
using namespace std;
int main()
{
long long n;
int k;
cin>>n>>k;
long long sum=1;
int count=0;
for(int i=1;i<n;i++)
{
sum*=(1+i*k);
while(sum%10==0&&sum>9)
{
sum=sum/10;
count++;
}
sum=sum%10000000;
//取余的时候应该取大点,防止进位时出现差错
}
cout<<count<<endl<<sum%10;
return 0;
}