学校oj题目二(枚举+求模+比较)
来源:互联网 发布:哈希map java 编辑:程序博客网 时间:2024/06/07 03:42
Description
夏天蚊子真多,睡不着,怎么办呢?小贤我没办法,只好坐在桌前发呆,拿着笔乱画,无意义的计算着,醒悟过来的时候,发现我算了好几个数字出来,很长很长,不过我隐约记得我是在计算N^N不过我不知道N是多少了,同时,数字也有些模糊不清,但还好,数字的位数不会出错。也就是如果我计算的是3^3=27,我可能写成了29或20之类的,但不会多或者少一位。
现在我想让你帮我看看我算的N到底是多少。
Input
输入样例有多组,每组一行,是一个N^N的值,一行中皆为0~9的字符,无空格(0<N<10000)。
Output
对于每组样例,输出一行,如果该数字是N^N则输出N的值,否则输出NO。
Sample Input
Sample Output
HINT
//思想:n^n最大会达到10000位,我们可以采取取模降低其位数,再枚举1-10000的n^n的值+快速幂求得答案
//code
#include<string>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<math.h>
#include<sstream>
#include<cstdlib>
#include<iomanip>
#define ll long long
using namespace std;
const int MOD=1e9+7;
ll quickPow(ll a,ll b){//快速幂
ll res=1;
while(b){
if(b&1)res=(res*a)%MOD;//注意对结果求了模,避免其值过大
b=b>>1;
a=(a*a)%MOD;//每升高一位,实际上就做了一个平方运算
}
return res;
}
int main(){
ll value[10005];
string str;//先用字符串存数据
ll r;
short res;
bool flag;
for(short i=1;i<=10000;i++)
value[i]=quickPow(i,i);//存放所有平方值
while(cin>>str){
r=0;
for(short i=0;i<str.length();i++)
r=(r*10+str[i]-'0')%MOD;//将其值转化为long long
flag=false;
res=-1;
for(short i=1;i<=10000;i++)
{
if(value[i]==r){
flag=true;
res=i;
break;
}
}
if(flag)cout<<res<<endl;
else cout<<"NO"<<endl;
}
}
- 学校oj题目二(枚举+求模+比较)
- 学校oj题目一(dfs)
- 九度OJ题目1046:求最大值
- 南阳oj 求次数 题目1112
- 华为OJ题目(十三):求最小公倍数
- 第八周oj题目求倒数和
- 九度OJ-题目1046 求最大值
- 九度OJ题目1046:求最大值
- 天勤OJ 题目1410: 比较字符串
- 南阳oj 题目276 比较字母大小
- 第十五周oj题目字符串比较
- 【学校OJ】 组合数学 组合数学一(你没看错,就是这个题目)
- 不同学校的OJ
- 学校OJ地址
- 学校oj平台上不去
- acm 学校海选题目
- 最简单的OJ题目(求两个整数之和)
- 九度OJ 题目1128:求平均年龄
- mongodb 安装
- 找两个链表的共同点
- 数据库详解
- Java编程思想之容器目录
- 流媒体技术简介
- 学校oj题目二(枚举+求模+比较)
- Scala快速排序
- HMM初探
- Java语言基础【1】
- 视频基础知识 视频行业专业术语注释
- 最大帧数
- Android 增量更新 bsdiff bspatch
- android的三级缓存
- 1. Django1.9应用特性注意事项