UVa 11029 Leading and Trailing

UVa 11029 Leading and Trailing (如何计算n^k的开头三位和末尾三位?)

11029 - Leading and Trailing

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=1970

Apart from the novice programmers, all others know that you can’t exactly represent numbers raised to some high power. For example, the C functionpow(125456, 455) can be represented in double data type format, but you won’t get all the digits of the result. However we can get at least some satisfaction if we could know few of the leading and trailing digits. This is the requirement of this problem.

Input

The first line of input will be an integer T<1001, where T represents the number of test cases. Each of the next T lines contains two positive integers,n and k. n will fit in 32 bit integer andk will be less than 10000001.

Output

For each line of input there will be one line of output. It will be of the format LLL…TTT, where LLL represents the first three digits ofn^k and TTT represents the last three digits of n^k. You are assured thatn^k will contain at least 6 digits.

Sample Input Output for Sample Input
2
123456 1
123456 2
123...456
152...936

思路:后三位好求,mod=1000的快速幂就是。

那前三位怎么求呢?——对数

令x=lg(n^k)的整数部分,y=lg(n^k)的小数部分,则n^k由y决定——因为10^x是1000...0。所以10^y再乘上100取整就是前三位。

完整代码:

/*0.015s*/

#include<cstdio>
#include<cmath>
#define sf scanf
#define pf printf
typedef long long ll;
const int mod = 1000;  

ll pow_mod(int n, int k)
{
    if (k == 0) return 1;
    ll temp = pow_mod(n, k >> 1);
    temp = temp * temp % mod;
    if (k & 1) temp = temp * n % mod;///注意这里中间运算结果会超int
    return temp;
}  

int main()
{
    int t, n, k;
    double intpart;
    sf("%d", &t);
    while (t--)
    {
        sf("%d%d", &n, &k);
        pf("%d...%03lld\n", (int)pow(10.0, 2.0 + modf((double)k * log10(n), &intpart)), pow_mod(n, k));
    }
    return 0;
}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, uva
, double
, temp
, and
, lead
The
leading and trailing、uva11029、leading trailing、ios leading trailing、leading and lagging,以便于您获取更多的相关知识。

时间: 2024-10-31 02:09:27

UVa 11029 Leading and Trailing的相关文章

UVa 10107 What is the Median? (O(N^2)就行||multiset)

10107 - What is the Median? Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1048 The Problem Median plays an important role in the world of statistics. By

UVa 10079 Pizza Cutting (water ver.)

10079 - Pizza Cutting Time limit: 8.333 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1020 When someone calls Ivan lazy, he claims that it is his intelligence that helps

mysql之字符串操作

写在前面 上篇文章学习了mysql常用的日期操作的函数,这篇文章将学习mysql的字符串操作的函数. 系列文章 mysql之创建数据库,创建数据表 mysql之select,insert,delete,update mysql之group by,order by mysql之count,max,min,sum,avg,celing,floor mysql之日期函数 mysql实战 1.ASCII(str) select ascii('a'); select ascii('ab'); select

ReportEngineService

http://dev.eclipse.org/viewcvs/viewvc.cgi/source/org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/services/ReportEngineService.java?view=co&revision=1.41&root=BIRT_Project   http://www.eclipse.org/birt/phoenix/deploy/rep

java 常用方法 normalizeSpace

问题描述 java 常用方法 normalizeSpace Remove leading and trailing whitespace and then replacing sequences of whitespace characters. public static String normalizeSpace(String str) { } 要求:需要运行速度快 解决方案 public static final String EMPTY_STRING = """&qu

javascript中的高级特性及特别对象、属性和方法

javascript|对象|高级 一,编写构造函数可以使用 new 运算符结合像 Object().Date() 和 Function() 这样的预定义的构造函数来创建对象并对其初始化.面向对象的编程其强有力的特征是定义自定义构造函数以创建脚本中使用的自定义对象的能力.创建了自定义的 构造函数,这样就可以创建具有已定义属性的对象.下面是自定义函数的示例(注意 this 关键字的使用). function Circle (xPoint, yPoint, radius) {   this.x = x

创建高级对象

创建|对象|高级 使用构造函数来创建对象 构造函数是一个函数,调用它来例示并初始化特殊类型的对象.可以使用 new 关键字来调用一个构造函数.下面给出了使用构造函数的新示例. var myObject = new Object(); // 创建没有属性的通用对象.var myBirthday = new Date(1961, 5, 10); // 创建一个 Date 对象.var myCar = new Car(); // 创建一个用户定义的对象,并初始化其属性. 通过构造函数将一个参数作为特定

js的trim(),Ltrim(),Rtrim()函数

js|函数 在Javascript中为String对象添加trim,ltrim,rtrim方法 利用Javascript中每个对象(Object)的prototype属性我们可以为Javascript中的内置对象添加我们自己的方法和属性.以下我们就用这个属性来为String对象添加三个方法:Trim,LTrim,RTrim(作用和VbScript中的同名函数一样)String.prototype.Trim = function(){    return this.replace(/(^\s*)|

去掉字符串前后的空格

字符串 //为String对象原型添加trim方法,去掉字符串前后的空格String.prototype.trim = function(){    // 用正则表达式将前后空格,用空字符串替代.    return this.replace(/(^\s*)|(\s*$)/g, "");} //-------------------------------------------------------------------------------------------------