求n^k的前三位数和后三位数
2016-08-23 21:25
127 查看
Description
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case starts with a line containing two integers: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107).
Output
For each case, print the case number and the three leading digits (most significant) and three trailing digits (least significant). You can assume that the input is given such that nk contains at least six digits.
Sample Input
5
123456 1
123456 2
2 31
2 32
29 8751919
Sample Output
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
数入n,k求n^k的前三位数和后三位数:
前三位:
设x = log (n^k) = k * log10(n),
那么10^x = n^k.将x = a(整数) + b(小数),
整数部分10^a是小数点的位置,并不影响前三位数字。
故只需要求出10^b取前三位。
使用fmod(a, 1)表示求浮点型数 a 的小数部分。
原型:extern float fmod(float x, float y)
用法:#include <math.h>
功能:计算x/y的余数
说明:返回x-n*y,符号同y。n=[x/y](向离开零的方向取整),如:fmod(f,(int)f)即可得到小数点后的部分
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case starts with a line containing two integers: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107).
Output
For each case, print the case number and the three leading digits (most significant) and three trailing digits (least significant). You can assume that the input is given such that nk contains at least six digits.
Sample Input
5
123456 1
123456 2
2 31
2 32
29 8751919
Sample Output
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
数入n,k求n^k的前三位数和后三位数:
前三位:
设x = log (n^k) = k * log10(n),
那么10^x = n^k.将x = a(整数) + b(小数),
整数部分10^a是小数点的位置,并不影响前三位数字。
故只需要求出10^b取前三位。
使用fmod(a, 1)表示求浮点型数 a 的小数部分。
原型:extern float fmod(float x, float y)
用法:#include <math.h>
功能:计算x/y的余数
说明:返回x-n*y,符号同y。n=[x/y](向离开零的方向取整),如:fmod(f,(int)f)即可得到小数点后的部分
#include<stdio.h> #include<math.h> #define ll __int64 ll QuackMod(ll a,ll b,ll mod) { //快速幂算法 ll ans=1; if(!b) return 1; ans=QuackMod(a*a%mod,b/2,mod); if(b&1) ans=ans*a%mod;//奇数 return ans; } int main() { int t,cont=0; scanf("%d",&t); while(t--){ ll n,k; scanf("%I64d%I64d",&n,&k); int strat=(int)pow(10.0,2.0+fmod(k*log10(n*1.0),1.0));//前三位 int end=(int)QuackMod(n,k,1000);//后三位 printf("Case %d: %d %03d\n",++cont,strat,end);// ll 输出就溢出! }//忽略了后三位的首位是 0 的情况 return 0; }//看别人的还不太明白;;;
相关文章推荐
- 查看byte,Short,lang,double,char类型的位数和大小的范围述
- 分位数和分位线(Quantiles and Percentiles)
- 5.3-4-1a 计算三位数的位数和
- 求一个整数的位数,输出它,以及逆序
- 输入一个任意整数,求各个位数之和。
- 让用户输入一个三位数(若不是三位数则提示错误),判断该数是否是水仙花数。(水仙花数:每一位上的数字的立方和,等于该数本身)
- 怎样求任意一个数的位数问题
- 两个数相除,并设定所取小数的位数
- 打印1到最大的n位数
- 字母+数字+限制位数的正则表达式验证
- HDU1018求大数N!的位数【取对数】
- (原创)vs2005下彩色验证码的实现(可自由定义是否加入干扰点、验证码位数等验证码显示效果)
- 用cout控制输出小数的位数
- cpu位数和系统位数
- 至少10位数,至少包含一个大写字母,至少一个小写字母,至少一个数字,(:;=*@)特殊字符中的一个正则表达式
- Java保留小数点后*位数的方法
- Android 限制edittext 整数和小数位数 过滤器(详解)
- js有效数字 显示指定位数
- 1021. 个位数统计
- 字符串格式化,不足位数的补0