admin 管理员组文章数量: 1184232
N^N
题目描述
夏天蚊子真多,睡不着,怎么办呢?小贤我没办法,只好坐在桌前发呆,拿着笔乱画,无意义的计算着,醒悟过来的时候,发现我算了好几个数字出来,很长很长,不过我隐约记得我是在计算N^N不过我不知道N是多少了,同时,数字也有些模糊不清,但还好,数字的位数不会出错。也就是如果我计算的是3^3=27,我可能写成了29或20之类的,但不会多或者少一位。
现在我想让你帮我看看我算的N到底是多少。
输入
输入样例有多组,每组一行,是一个N^N的值,一行中皆为0~9的字符,无空格(0
输出
对于每组样例,输出一行,如果该数字是N^N则输出N的值,否则输出NO。
样例输入
27
29
285311670611
样例输出
3
NO
11
#include<iostream>
#include <cmath>using namespace std;#define MOD 1000000443
#define LL long longint main(){string str;double len;int len1 = 0;LL s, s1;while (cin >> str) {len = str.length();for (int i = 1; i < 10000; ++i) {if (len <= i*log(i)/log(10)){break;}len1 = i;}s = 0;for (int i = 0; i < len; ++i) {s = (10*s + (str[i]-'0')) % MOD;}s1 = 1;for (int i = 0; i < len1; ++i) {s1 = (s1 * len1) % MOD;}if (s == s1) {cout << len1 << endl;continue;}len1++;s1 = 1;for (int i = 0; i < len1; ++i) {s1 = (s1 * len1) % MOD;}if (s == s1) {cout << len1 << endl;} else {cout << "NO" << endl;}}return 0;
}
用字符串,先根据长度查找范围(取对数),然后求出该位数对应的 N^N 中的 N是几。
例如
9* log(9) =8.5881825849539238713105022585921
9^9=387420489 ==> 9 位
按照位数 匹配对应的N^N
如果对数接近整数,可以比较两次 都不等不是,一个相等结束比较
然后通过取模的方式来判断是不是该数。
本文标签: NN
版权声明:本文标题:N^N 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1687193377a74611.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论