一个难题

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-29 11:41:11

问题描述:
GOJ给C_Shit_Hu,super13,TestN,LOP带来了一个难题:给了a和b,如何知道a ^ b。每个人都反对这个BT问题,所以GOJ使这个问题比开始容易。
这个难题描述:
给了a和b,如何知道a ^ b的最后一位数字。

输入:
有多个测试用例。每个测试用例由两个数字a和b(0 <a,b <= 2 ^ 30)组成

输出:
对于每个测试用例,您应该输出a ^ b的最后一位数字。

输入样例:
7 66
8 800
样本输出:
9
6

注意到检测数字较大,容易造成超时,无法使用常规方法运算

解决方案:

#include <stdio.h>
#include <string.h>

int main(void){
	int ans[8];
	int index;  //答案数组下标
	int cnt, n, tmp, i;
	while(scanf("%d %d", &n, &cnt) != EOF){
	
		//清空答案
		index = 0;		
		memset(ans, 0, sizeof(ans));    
		
	    n %= 10;
		tmp = n;
		
		if(!cnt){
			printf("%d\n" ,ans);
			continue;
		}

		//进行答案的输入
		while(1){
			i = 0;
			
			//查重
			while(i < index){
				if(ans[i++] != tmp){    //未重复
					continue;
				}
				else{   //检查到重复
					i = -1;
					break;
				}
			}

			//存答案
			if(i != -1){
				ans[index++] = tmp;
			}
			else{
				break;
			}

			tmp = (n*tmp)%10;
		}

		printf("%d\n", ans[(cnt-1)%index]);
		
	}

	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!