题意:
给你一个n[1,10^18],问你有多少个正整数k满足,k^k <= n;
分析:
用计算器算了一下,15的15次方是18位,16的16次肯定就超出19位了。
so打表---k[1,15]的k次方;然后判断n大于几个;
用了一个小技巧,打表从1开始存,这样的话遍历一遍,数组的下表就是满足的个数!~~
不打表的话---
这个题可以用来锻炼一个算法——————**快速幂**---在这里就不详细解释了^_^
这个题我有一个问题,一开始我使用了c++自带的求k的k次方,就是过不了,代码在最下面
但是手写一个求k的k次方就过了。。有知道的可以留言下下-----O(∩_∩)O谢谢
代码:
正确代码:
#include <cstring>
#include <iostream>
#include <algorithm>
#include <math.h>
#define maxn 55
#define ll long long int
using namespace std;
ll num[16];
void init(){
for(int i = 1; i < 16 ;i++){
num[i] = 1;
int k = i;
for(int j = 0; j < i;j++){
num[i] *= k;
}
}
}
int main(){
ll n;
init();
while(cin>>n){
int i = 1;
for(i;i < 16;i++){
if(n < num[i]){
break;
}
}
cout<<--i<<endl;
}
return 0;
}
错误代码:
欢迎帮忙指正~~~
#include <cstring>
#include <iostream>
#include <algorithm>
#include <math.h>
#define maxn 55
#define ll long long int
using namespace std;
ll num[16];
void init(){
for(int i = 1; i < 16 ;i++){
num[i] = (ll)pow(i,i);
}
}
int main(){
ll n;
init();
while(cin>>n){
int i = 1;
for(i;i < 16;i++){
if(n < num[i]){
break;
}
}
cout<<--i<<endl;
}
return 0;
}