1061

这道题解法多样,我的是劳模做法。下面附一些大神级别的让人脑洞大开的解法。。。

1,、劳模做法:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iomanip>
using namespace std;
const int MAX = 5845;
int main()
{
    long long n;
    int T;
    while(cin>>T)
    {
        while(T--){
        cin>>n;
        int x = n%10;
        switch(x)
        {
            case 0: cout<<x<<endl; break;
            case 1: cout<<x<<endl;  break;
            case 2: cout<<((n/10)%2?"6":"4")<<endl; break;
            case 3: cout<<((n/10)%2?"3":"7")<<endl; break;
            case 4: cout<<"6"<<endl; break;
            case 5: cout<<x<<endl; break;
            case 6: cout<<x<<endl; break;
            case 7: cout<<((n/10)%2?"7":"3")<<endl; break;
            case 8: cout<<((n/10)%2?"4":"6")<<endl; break;
            case 9: cout<<x<<endl;
        }
    }
    }
    return 0;}

某大神叼炸天的打表,可以说是劳模做法的简化版

#include <iostream>
using namespace std;

int main(){
	int n,m;
	int a[10][4] = {{0,0,0,0},{1,1,1,1},{2,4,8,6},{3,9,7,1},{4,6,4,6},{5,5,5,5},{6,6,6,6},{7,9,3,1},{8,4,2,6},{9,1,9,1}};
	cin>>m;
	while(m--)
		cin>>n,cout<<a[n%10][n%4-1>=0?n%4-1:3]<<endl;
	return 0;
}


接下来是一个功能函数,他用的是递归,也是蛮精简的:

int solve(int n,int m){
	if(m==0) return 1;
	if(m==1) return n;
	if(m%2==0) return solve(n*n%10,m/2);
	if(m%2!=0) return n*solve(n*n%10,(m-1)>>2)%10;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值