zoukankan      html  css  js  c++  java
  • UVa 11029 Leading and Trailing(log法求大数前3位)

    题意:

    给定n, k,求n^k的前3位和后三位。

    思路:

    1. 后三位司空见惯,利用快速幂取模,二分法快速求解。

    2. 前三位要费点周折了,要用到库函数以及log (后面默认10为底),有了这些知识储备就可以巧妙的求解前3位了。

       先分析对于n求其前3位,n很大:a = logn,于是有n = 10^a。分解a = i + d,i为a的整数部分,d为小数部分

       n = 10^i * 10^d,由于10^i只会影响位数,所以真正影响n的前3位的是10^d,求出10^d就OK了

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    
    long long int foo(int n, int k)
    {
        if (k == 1)
            return n % 1000;
    
        long long int ans;
    
        ans = foo(n, k >> 1);
        ans = (ans * ans) % 1000;
    
        if (k % 2)
            ans = (ans * n) % 1000;
    
        return ans;
    }
    
    void solve(int n, int k)
    {
        int t3 = foo(n, k);
        int l3 = (int)pow(10, 2 + fmod(k*log10(n*1.0), 1));
        printf("%d...%03d\n", l3, t3);
    }
    
    int main()
    {
        int cases;
        scanf("%d", &cases);
        while (cases--)
        {
            int n, k;
            scanf("%d %d", &n, &k);
            solve(n, k);
        }
        return 0;
    }
    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    C#写入系统日志(日志位置)
    vue element enter事件
    C#记一次配置文件的坑
    C#简单解决winfrom窗体打开时候闪动
    C#语言切换
    C#textbox允许换行
    C#中窗体边框隐藏
    C#背景图片自适应
    IOC的实现原理—反射与工厂模式
    终生学习
  • 原文地址:https://www.cnblogs.com/kedebug/p/2803078.html
Copyright © 2011-2022 走看看