2011(C++)

https://acs.jxnu.edu.cn/problem/NOIOPJCH02042991

2011

描述:

已知长度最大为200位的正整数n,请求出2011^n的后四位。

输入:

第一行为一个正整数k,代表有k组数据,k<=200接下来的k行,

每行都有一个正整数n,n的位数<=200

输出:

每一个n的结果为一个整数占一行,若不足4位,去除高位多余的0

样例输入:

3
5
28
792

复制

样例输出:

1051
81
5521

 关于本题,一开始就要注意这是个求指数的问题,而且指数的位数范围在200位,可见没有这么大的数据类型用于存放指数,所以我们将指数当作字符存放到字符数组当中。

一个规律:2011的n次方的后四位数的规律:每500个数循环一次,就是说2011^{1}2011^{501}的后四位相同。所以我们只需要将该指数取500的模的结果当作新的指数参与计算就能得到相同的后四位数了。

因为我们需要将该指数 mod 500,可想而知,先前存在字符数组里的数并不是全部都需要的,如果输入的指数超过3位,我们只需要取后三位(转换成整数)mod 500 即可,这样就可以巧妙地避免因高位数无法存储而无法取模计算的问题了。

#include//万能头文件
using namespace std;
char a[210];
int main()
{
    int k,i;
    cin>>k;
    while(k--)
    {
        int m=1;//m和x都要放在循环内每次更新
        int x=0;
        cin>>a;//题给200位太大,存储在字符数组中
        int len=strlen(a);
        if(len>3)
        {
            for(i=len-3;i

 

你可能感兴趣的:(C++,蓝桥杯,职场和发展)