k次方的首末三位
来源:互联网 发布:淘宝直通车从哪里进入 编辑:程序博客网 时间:2024/05/08 19:42
K次方
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 10 Accepted Submission(s) : 3
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
所有在程式设计已经有点经验的人都知道,当k很大时你无法完整的表达出n k。例如: C语言的函数 pow(123456,455)能够用double资料型态来表达,但是你却无法得到所有正确的数字。然而,若是能知道一些最左边(leading)和最右边(trailing)数字的话,也可稍微得到一些满足。
Input
输入的第一行有一个整数T(T < 1001),代表有几组测试资料。接下来的T行,每行有2个正整数n和k。n可以用32位元的整数表达,而k<10000001。
Output
每组测试资料输出一行,输出LLL...TTT的样式。其中LLL代表n k的最左边3个数字,TTT代表n k的最右边3个数字。例如123456 2 = 15241383936,所以你应该输出152...936。
你可以假设n k至少有6位数。
你可以假设n k至少有6位数。
Sample Input
3123456 1123456 22100000056 67333
Sample Output
123...456152...936982...016
以前做过类似的。
求前3位采用科学计数法两边取对数的方法。
求后3位采用二分幂取模的方法。
可是我却用了找循环节!而且还找了两个半小时!真是浪费时间啊!
#include<iostream>#include<cmath>using namespace std;__int64 getansb( __int64 n,__int64 k ){ __int64 b; if( k==1 ) return n%1000; if( k==0 ) return 1; b=getansb( n,k/2 )%1000; b=(b*b)%1000; if( k%2==1 ) b=(b*n%1000); return b%1000;}int main(){ __int64 n,k;int T; scanf( "%d",&T ); while( T-- ) { scanf( "%I64d %I64d",&n,&k ); double lo=k*log10(double(n)); double a=lo-int(lo); a=pow(10.0,a); while( a<1 ) a*=10; int aa,ab,ac; aa=int(a); ab=int(a*10-aa*10); ac=int(a*100-aa*100-ab*10); printf( "%d%d%d...",aa,ab,ac ); __int64 b=getansb(n,k); if( b<100 ) printf( "0" ); if( b<10 ) printf( "0" ); if( b==0 ) printf( "0\n" ); else printf( "%I64d\n",b ); } return 0;}
d
- k次方的首末三位
- 求解13的13次方的末三位(10进制)
- 乘积的末三位
- 乘积的末三位
- K次方(即求n^k的前三位与后三位)
- K次方(即求n^k的前三位与后三位)
- 求一个数的k次方的前三位。
- 神奇的数学公式。。。求《k次方》的前三位与后三位
- 习题3-3,乘积的末三位
- X的Y次方的后三位
- 求高次方的最后三位尾数
- 求M的N次方最后三位
- a的b次方后三位
- 末三位整数
- 末三位整数
- 末三位整数
- 算法竞赛入门经典3-3 乘积的末三位
- 乘积的末三位(product)~算法竞赛入门
- ZOJ 1405 Tanning Salon
- 【网站制作视频教程】 第4讲 html标记语义应用上集!-传智播客
- C++从mongodb取图片操作(存入内存处理图片)!
- 可扩展性数据库的架构设计
- 基础知识整理
- k次方的首末三位
- ssh 公钥无密码访问
- 在设计应注意的细节!
- 第n+1周任务控制
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- Linux 系统设置 ulimit 以及 Core文件的生成
- android本地图片选择【类似于浏览】
- drupal 写定时任务
- 全排列问题的STL用法(next_permutation类)