zoukankan      html  css  js  c++  java
  • 试题 算法提高 计算超阶乘(水题)

    问题描述
      计算1*(1+k)*(1+2*k)*(1+3*k)*...*(1+n*k-k)的末尾有多少个0,最后一位非0位是多少。
    输入格式
      输入的第一行包含两个整数n, k。
    输出格式
      输出两行,每行一个整数,分别表示末尾0的个数和最后一个非0位。
    样例输入
    15 2
    样例输出
    0
    5
    数据规模和约定
    1<=k<=10,1<=n<=1000000。
    思路
    我们只需知道末尾的0的个数,所以在运算过程去判断末尾是不是0(任何数乘以十的倍数仍然是十的倍数),并不断取模防止溢出即可。
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n,k,f,num=0;
        long long int sum=1;
        cin>>n>>k;
        for(int i=1;i<n;i++){
            sum*=(1+i*k);
            while(sum%10==0&&sum){
                sum/=10;
                num++;
            }
            sum%=1000000000;
        }
        cout<<num<<endl;
        cout<<sum%10<<endl;
        return 0;
    }
  • 相关阅读:
    求最大公约数
    1013
    实现页面的3D效果
    实现购物车的加减算法
    随机验证码
    深入理解jQuery中的ajax
    canvas粒子时钟
    node、express框架
    vue的增删改查
    实现点击a标签页面跳转后颜色高亮
  • 原文地址:https://www.cnblogs.com/mohari/p/13557453.html
Copyright © 2011-2022 走看看