【信息学奥赛】1234:2011 题解

【信息学奥赛】1234:2011 题解
题目已知长度最大为200位的正整数n请求出2011的n次方的后四位。输入第一行为一个正整数k代表有k组数据k≤200接下来的k行每行都有一个正整数nn的位数≤200。输出每一个n的结果为一个整数占一行若不足4位去除高位多余的0。分析该题目要求计算2011 的 n 次方的后四位其中 n 是长度最大为 200 位的正整数。输入包含一个正整数 kk≤200表示数据组数后续 k 行每行一个位数≤200 的正整数 n 输出为每个 n 对应的结果若不足 4 位则去除高位多余的 0。用普通的方法会直接爆掉所以我们要用快速幂来解决代码#includecstdio #includeiostream #includestring #includesstream using namespace std; string s; int k; int qpow(int a,int b,int k){ int ans1,sa; while(b!0){ if(b1)ansans*s%k; ss*s%k; b1; } return ans%k; } int v(string st){ int lenst.size(); if(len3) stst.substr(len-3,3); istringstream ist(st); int sum; istsum; return sum; } int main(){ cink; for(int i1;ik;i){ cins; int nv(s); n%500; coutqpow(2011,n,10000)endl; } return 0; }