3 条题解

  • 2
    @ 2024-5-18 8:58:01

    额👀️ 😕

    • 2
      @ 2024-4-20 21:44:21

      直接一个快速幂 非常的简单 由于题目要求输出后三位 直接对1000进行取模 最后判断前导0 输出即可 下面是两种较优的方案 再优化就是快读我也不会(0v0) (过了就是好代码)

      #include <bits/stdc++.h>
      
      using namespace std;
      
      typedef long long LL;
      
      // 递归快速幂
      
      // LL QuickPow(LL a, LL n, LL p)
      
      // {
      
      //     if (a == 0)
      
      //         return 1;
      
      //     else if (n % 2 == 1)
      
      //         return (QuickPow(a, n - 1, p) \* a) % p;
      
      //     else
      
      //     {
      
      //         int temp = (QuickPow(a, n / 2, p)) % p;
      
      //         return temp \* temp;
      
      //     }
      
      // }
      
      // 循环快速幂
      
      LL QuickPow(LL a, LL n, LL p)
      
      {
      
          int ans = 1;
      
          while (n)
      
          {
      
              if (n & 1)
      
              {
      
                  ans = ((ans % p) \* (a % p)) % p;
      
              }
      
              a = (a % p \* a % p) % p;
      
              n >>= 1;
      
          }
      
          return ans % p;
      
      }
      
      
      int main()
      
      {
      
          LL a, n, p;
      
          cin >> a >> n >> p;
      
          p = 1000;
      
          int Q = QuickPow(a, n, p);
      
          if (Q < 100)
      
          {
      
              if (Q > 10)
      
              {
      
                  cout << '0' << Q;
      
                  return 0;
      
              }
      
              cout << "00" << Q;
      
              return 0;
      
          }
      
          cout << Q;
      
      
          return 0;
      
      }
      
      • 1
        @ 2024-5-27 19:24:04

        太难了!没学高精度根本不会👎看了楼上题解,不会…… 这道题的数据范围极大,a的b次方 那么可以每乘一次b就取末三位,就可以达成第一步 他还要在前面补零!不要漏了! 代码如下

        #include<bits/stdc++.h>
        using namespace std;
        int main()
        {
            int a,b,c;
            cin>>a>>b;
            c=a;
            for(int i=2;i<=b;i++){
                a=a*c;
                a%=1000;
            }
            if(a<100&&a>10){
                cout<<0<<a;
            }else{
                if(a<100&&a<10){
                    cout<<0<<0<<a;
                }else{
                    cout<<a;
                }
            }
        	return 0;
        }
        
        • 1

        信息

        ID
        31
        时间
        1000ms
        内存
        256MiB
        难度
        3
        标签
        递交数
        125
        已通过
        24
        上传者