LightOJ
来源:互联网 发布:商场女装品牌推荐 知乎 编辑:程序博客网 时间:2024/04/26 17:33
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 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).
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.
5
123456 1
123456 2
2 31
2 32
29 8751919
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
求一个数的后三位大家都会求,只要 mod 1000 就可以了。其实求前三位也很简单,只需要将其变成整数位为一位的浮点型,最后乘以100取整就可以了。比如说12345,可以先变成1.2345,[1.2345*100]=123。乘方计算用快速幂。
代码:
#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>using namespace std;typedef long long LL;int getlen(long long n){ int len=0; while(n) { n/=10; len++; } return len;}int main(){ int t; scanf("%d",&t); for(int tt=1; tt<=t; tt++) { long long n,k; scanf("%lld%lld",&n,&k); double m=n/pow(10,getlen(n)-1); long long x=n; int res = 1,mod = 1000; double r=1; while(k > 0) { if(k & 1) { res = res * x % mod; r = r * m; while(r>=10) { r /= 10; } } x = x * x % mod; m = m * m; while(m>=10) { m /= 10; } k >>= 1; } printf("Case %d:",tt); if(res<10) printf(" %d 00%d\n",(int)(r*100),res); else if(res<100) printf(" %d 0%d\n",(int)(r*100),res); else printf(" %d %d\n",(int)(r*100),res); } return 0;}
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- [LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- 两个栈实现一个队列&两个队列实现一个栈
- 对Mybatis粗浅认知
- CIFS文件系统
- 准备 macvlan 环境
- UVALive
- LightOJ
- PAT1002:1002. A+B for Polynomials 解题报告
- Tomcat实战-调优方案
- 使用eclipse构建现有的maven项目开发环境
- Sumset 递推 poj2299
- java实现分组算法,根据每组多少人来进行分组
- 机器学习入门-深度学习
- apk打包流程
- keras知识点笔记