杭电1061

我的代码,感觉没什么问题,也从1-10测试过,但是一直不给AC,并不知道什么原因

#include <iostream>
using namespace std;
int main(int argc, char** argv) {
    int n=0;//准备输入的次数 
    int a=0;// the input
    int copyA=0;//用来计数 
    int sum=1;//求和 
    cin>>n;
    while(n!=0)
        {
            cin>>a;
            if(a==0)
            {
             cout<<1<<endl;    
        }
        else
        {
            copyA=a;
            a=a%10;
            copyA=copyA%4;
            if(copyA!=0)
           {
            while(copyA>0)
              {
                sum=sum*a;
            copyA--; 
            }
        }
        else
        {
            sum=sum*a*a*a*a;
        }
        
        cout<<sum%10<<endl;
    }
        n--;
            
                    } 
}

 

下面是网上找的代码已经AC。

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, m;
cin >> n;
m = n % 4;
if (m == 0)
m = 4;
n = n % 10;
cout <<int( pow(n, m)) % 10 << endl;

return 0;
}

后面对照博主的代码把自定义乘方换成pow函数 杭电OJ就给过了

#include <iostream>
#include<math.h>
using namespace std;
int main(int argc, char** argv) {
    int n=0;//准备输入的次数 
    int a=0;// the input
    int copyA=0;//用来计数 
    int sum=1;//求和 
    cin>>n;
    while(n!=0)
        {
            cin>>a;
            copyA=a;
            a=a%10;
            copyA=copyA%4;
            if(copyA!=0)
           {
            sum=pow(a,copyA);
            }
        else
         {
            sum=pow(a,4);
          }
        
        cout<<sum%10<<endl;
    }
        n--;
            
                    
}

提示:此种题目一定不能暴力直接求,不然一定time exceed。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值