zoukankan      html  css  js  c++  java
  • 【OpenJudge】2991:2011 题解

    2011

    时间限制: 1 Sec  内存限制: 128 MB

    题目描述

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

    输入

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

    输出

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

    样例输入

    3
    5
    28
    792
    

    样例输出

    1051
    81
    5521



    这道题。。第一想法是高精度

    这里观摩szp的高精度

    然而楼主太懒不想写。。

    于是再读读题发现只需要输出后四位

    因此答案必然有一个最多5位数的循环节

    于是就先写个暴力去找循环节

    发现循环节长度为500,这个数就很好处理了

    后面读入n时只保留后三位数

    再mod500

    就得出答案了,比写高精度简单多了~

    (所以还是要仔细看题呀!)


    下面贴代码

    #include<cstdio>
    #include<cstdlib>
    #include<string.h>
    bool v[10000];
    int p[10000],cnt;
    int main(){
        int n;
        long long c=2011;
         
        while(1){
            c%=10000;
            if(v[c])break;
            v[c]=true;
            p[cnt++]=c;
            c*=2011;
        }
         
        char input[300];
        //printf("%d
    ",cnt);
        //cnt=500
        scanf("%d",&n);
        while(n--){
            scanf("%s",input);
            int len=strlen(input);
            int a=input[len-1]-'0';
            if(len>=2)a+=(input[len-2]-'0')*10;
            if(len>=3)a+=(input[len-3]-'0')*100;
            a--;
            if(a==0){
                printf("1
    ");
                continue;
            }
            a%=500;
            printf("%d
    ",p[a]);
        }
    }


  • 相关阅读:
    微服务配合docker使用
    基于docker部署使用ELK+FileBeat日志管理平台
    Ubuntu开发用新机安装流程
    http 直接从body里传输数据
    005
    003
    004
    001
    002
    谷歌查看、管理cookie
  • 原文地址:https://www.cnblogs.com/Hineven/p/5843575.html
Copyright © 2011-2022 走看看