Leading and Trailing LightOJ - 1282 题解
LightOJ - 1282 Leading and Trailing 题解
纵有疾风起
题目大意
题意:给你一个数n,让你求这个数的k次方的前三位和最后三位。
\(2<=n<2^{31}\),\(1<=k<10^{7}\)
并且\(n^{k}\)至少有6位数
解题思路
这个题目需要解决两个问题
- 输出\(n^{k}\)的前三位
 - 输出\(n^{k}\)的后三位
 
输出后三位
这个比较好解决,使用快速幂和模运算就能解决,这里不再详细介绍,看代码就行了。
输出前三位
这个比较麻烦,因为\(n^{k}\)会相当大,即使long long类型也不能存下来,那个我们就要想办法来降低这个结果的位数。
怎么办呢?使用对数来降低位数
\]
\]
这样\(k*lgn\)的整数部分提供位数,小数部分提供精度,我们需要去掉整数只保留小数部分。
需要注意的是就算\(10^{0.0001}>1\)(根据指数函数),即10的小数部分次幂也是大于零的,这样我们把这个结果载乘以100就是前三位了(因为小数点前面已经有1了)。
代码实现
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,k;
int qpow(int n,int k) //快速幂模板
{
    int ans=1,base=n%1000;
    while(k)
    {
        if(k%2==1)
        {
            ans=(ans*base)%1000;
        }
        base=(base*base)%1000;
        k/=2;
    }
    return ans;
}
int main()
{
    int t;
    scanf("%d",&t);
    for(int i=1; i<=t; i++)
    {
        scanf("%d%d",&n,&k);
        double a=(double)k*log10(n*1.0); //注意这个log函数的参数需要是浮点数,double类型
        a-=(int)a; //去掉整数部分
        double pre=pow(10.0,a); //求10的小数部分次幂
        printf("Case %d: %d %03d\n",i ,(int)(pre*100),qpow(n, k)); //处理输出即可
    }
}
END
Leading and Trailing LightOJ - 1282 题解的更多相关文章
- D - Leading and Trailing LightOJ - 1282
		
题解:求n^k的前三位和后三位. 后三位直接快速幂对1000去余就可以了.前三位可以转换成浮点数来操作,也是用快速幂,我们只保留答案的前三位,当前值大于1000.0的话就除以10,直到结果小于等于10 ...
 - Leading and Trailing LightOJ - 1282 (取数的前三位和后三位)
		
题意: 求n的k次方的前三位 和 后三位 ...刚开始用 Java的大数写的...果然超时... 好吧 这题用快速幂取模求后三位 然后用一个技巧求前三位 ...orz... 任何一个数n均可以表示 ...
 - lightoj 1282 && uva 11029
		
Leading and Trailing lightoj 链接:http://lightoj.com/volume_showproblem.php?problem=1282 uva 链接:http:/ ...
 - LightOJ 1282 Leading and Trailing (快数幂 + 数学)
		
http://lightoj.com/volume_showproblem.php?problem=1282 Leading and Trailing Time Limit:2000MS Me ...
 - UVA 11029 ||  Lightoj 1282  Leading and Trailing  数学
		
Leading and Trailing You are given two integers: n and k, your task is to find the most significant ...
 - 1282 - Leading and Trailing   求n^k的前三位和后三位。
		
1282 - Leading and Trailing You are given two integers: n and k, your task is to find the most signi ...
 - Leading and Trailing(数论/n^k的前三位)题解
		
Leading and Trailing You are given two integers: n and k, your task is to find the most significant ...
 - LightOJ1282 Leading and Trailing  —— 指数转对数
		
题目链接:https://vjudge.net/problem/LightOJ-1282 1282 - Leading and Trailing PDF (English) Statistics ...
 - 【LightOJ1282】Leading and Trailing(数论)
		
[LightOJ1282]Leading and Trailing(数论) 题面 Vjudge 给定两个数n,k 求n^k的前三位和最后三位 题解 这题..真的就是搞笑的 第二问,直接输出快速幂\(m ...
 
随机推荐
- Spring Batch Hello World
			
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11995146.html Project Directory Maven Dependency < ...
 - el-select中显示图标/图片设置
			
<template> <el-select ref="select_icon" v-model="addModel.icon" @change ...
 - jq元素左边距
			
获取页面某一元素的绝对X,Y坐标,可以用offset():var X = $(‘#DivID’).offset().top;var Y = $(‘#DivID’).offset().left; 获取相 ...
 - 2017南宁网络赛  Problem  J  Minimum Distance in a Star Graph ( 模拟 )
			
题意 : 乱七八糟说了一大堆,实际上就是问你从一个序列到另个序列最少经过多少步的变化,每一次变化只能取序列的任意一个元素去和首元素互换 分析 : 由于只能和第一个元素去互换这种操作,所以没啥最优的特别 ...
 - 【CF1247E】Rock Is Push(DP,二分)
			
题意:有一个n*m的方格,每一格可能为空也可能有石头,要从(1,1)走到(n,m),每次可以往右或往下走 每次走的时候都会将自己面前的所有石头向移动方向推一格,如果碰到了边界就推不过去 问方案数模1e ...
 - [CSP-S模拟测试]:环(图论+期望)
			
题目传送门(内部题79) 输入格式 第一行读入两个整数$n,e$表示节点数及$cwystc$已确定的有向边边数. 接下来$e$行,每行两个整数$x,y$描述$cwystc$确定的边. 输出格式 输出一 ...
 - [CSP-S模拟测试]:简单的序列(DP)
			
题目描述 从前有个括号序列$s$,满足$|s|=m$.你需要统计括号序列对$(p,q)$的数量. 其中$(p,q)$满足$|p|+|s|+|q|=n$,且$p+s+q$是一个合法的括号序列. 输入格式 ...
 - Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具)
			
Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具) 本文使用 Gradle 作为构建工具,关于 Gradle 构建工具,可以理解为是 Mav ...
 - 模拟vue实现简单的webpack打包
			
一.安装nodejs,查看是否安装成功 二.package.json项目初始化 npm init 电脑有node环境,在根目录下运行命令npm init初始化项目,根据提示输入项目相关信息,然后运行. ...
 - java配置环境变量   jdk1.8
			
1.首先第一步安装JDK window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/j ...