就是求一个数最大能开多少次方,一开始没注意到有负数的情况。负数要另外处理。
//============================================================================// Name : 1730.cpp// Author : // Version :// Copyright : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include#include #include using namespace std;int n, k;int t, num, tag;int main() { freopen("a.txt", "r", stdin); while(scanf("%d", &n)&&n){ if(n > 0){ t = sqrt(n); tag = 0; for(int i = 2;i <= t;i++){ num = 0; k = n; while(k%i == 0){ ++num; k /= i; } if(k == 1){ printf("%d\n", num); tag = 1; break; } } if(tag == 0){ printf("1\n"); } } else if(n < 0){ t = sqrt(-n); tag = 0; for(int i = -2;i >= -t;i--){ num = 0; k = n; while((-k)%(-i) == 0){ ++num; k /= i; } if(k == 1){ printf("%d\n", num); tag = 1; break; } } if(tag == 0){ printf("1\n"); } } } return 0;}