zoukankan      html  css  js  c++  java
  • uva 11029 Leading and Trailing

    题目大意:

      输入两个数,分别是n,k,求nk的前三位,后三位,保证nk至少有6位。

    解题思路:

      求前三位,因为后面的数字可能会影响前三位,double可以保证一部分精度又不至于会溢出,所以可以用二分快速幂+double来求前三位。

      求后三位,因为前面的数字不会影响到后三位,所以不用考虑精度,可直接用二分快速幂来求前三位,边乘边取余

    代码:

      

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 #define maxn 16005
     8 int a[maxn];
     9 
    10 double solve (double x)//求前三位的时候,控制x在1000以内
    11 {
    12     while (x >= 1000)
    13         x /= 10;
    14     return x;
    15 }
    16 
    17 int high (int n, int k);
    18 int low (int n, int k);
    19 
    20 int main ()
    21 {
    22     int t, n, k, l = 1;
    23     scanf ("%d", &t);
    24     while (t --)
    25     {
    26         scanf ("%d %d", &n, &k);
    27         printf ("Case %d: %03d %03d
    ", l++, high(n, k), low(n, k));//后三位可能出现第一位是零的时候
    28     }
    29     return 0;
    30 }
    31 
    32 int high (int n, int k)
    33 {
    34     double x, y = 1;
    35     x = n;
    36     x = solve(x);
    37     while (k)
    38     {
    39         if (k % 2)
    40             y *= x;
    41         x *= x;
    42         k /= 2;
    43         x = solve (x);
    44         y = solve (y);
    45     }
    46     return (int)y;
    47 }
    48 
    49 int low (int n, int k)
    50 {
    51     int m = 1;
    52     n %= 1000;
    53     while (k)
    54     {
    55         if (k % 2)
    56             m = (m * n) % 1000;
    57         n = (n * n) % 1000;
    58         k /= 2;
    59     }
    60     return m;
    61 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    python 访问对象的属性与方法
    python 使用类实列化对象
    python 第一个Python类(创建类)
    python 安装第三方模块
    Redux其实很简单(原理篇)
    JavaScript、ES5和ES6的介绍和区别
    Yes,I know the way to learn Ens !
    移动游戏加载性能和内存管理全解析 学习
    内存耗用:VSS/RSS/PSS/USS
    Android性能测试-内存
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4437520.html
Copyright © 2011-2022 走看看