N的N次方(高校俱乐部)

最近一直在刷字符串和线段树,也越来越少玩高校俱乐部,无聊看到一题N的N次方的问题,脑海中各种打表就涌现出来了。

弄了不一会儿,就写完了,马上提交,但是系统好像出了问题,提示“哦哦,出了点状况”,但是分数加了上去并且挑战成功也有我……

到现在我还不知道我的做法对,或者不对,暂且我就当作是对吧……

来看题目:

我在计算N的N次方,给出结果a,你能否求出N呢?我给出的结果会出错,但是如果出错的话,我保证和正确地结果只有一个数字不对(不会增加或者减少数字)。给出输入,求输出的整数(保证结果在int范围内),输入用字符串表示,长度不超过500000,无首0。如果证明我出错了,请输出-1。例如,输入27,输出3。而输入20,只能输出-1了。输入格式:多组数据,第一行是 T,表示数据组数。以下T行,每行是一个大整数。输出格式对每组数据,输出一行答案。

输入样例

4

3

4

3225

387420489

输出样例:

-1

2

-1

9

我简单说一下我的思路:

500000位数,N大概去到1600,也就是只有1600个可能。

这时我就想,直接贴表吧!

但是50万位啊,复制粘帖都心碎……

后来我就想,太稀疏了,用hash吧,而hash函数怎么设置呢?

一个很自然的想法就是把所有的位数加起来即可。

即 for(i=0;i<n;i++) key+=a[i];

后来,想了一下,这样hash的结果好像不是很准确……

所以我又写多了hash,平方和……还是很自然的想法

for(i=0;i<n;i++) key+=a[i]*a[i];

这样我就可以只需要贴1600行了……

哇拉拉地打了一个表,贴了一下……好像是过了。

(注意,如果你不懂大数n^n次方,1你可以学习一下大数。2.你可以用java来水)



我觉得我完全按没有必要去传字符串,直接用就好了……不过手快交了就算了。

后来,我用另外一个号测试只用hash2,好像也得分了……

求大神的各种做法。

不给发代码啊……这是怎么敏感了……

有兴趣的可以联系我……

你可能感兴趣的:(N的N次方(高校俱乐部))