题目来源:http://ac.jobdu.com/problem.php?pid=1085
问题描述:
-
N<k时,root(N,k) = N,否则,root(N,k) = root(N',k)。N'为N的k进制表示的各位数字之和。输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000)
-
输入:
-
每组测试数据包括一行,x(0<x<2000000000), y(0<y<2000000000), k(2<=k<=16)
-
输出:
-
输入可能有多组数据,对于每一组数据,root(x^y, k)的值
-
样例输入:
-
4 4 10
-
样例输出:
-
4
#include <stdio.h>
#include <math.h>
#define THRESHOLD 2000000000
int root(int N, int k);
int sum(int N, int k);//返回N的K进制的各位数字之和
int main()
{
int a = 1000, b = 2;
int c = 10;
if( a >= THRESHOLD || b >= THRESHOLD)
{
printf("ERROR: flow.\n");
return -1;
}
int N = pow(a,b);
if(N >= THRESHOLD)
{
printf("ERROR: flow.\n");
return -1;
}
int result = root(N, c);
printf("%d\n", result);
return 0;
}
int sum(int N, int k)
{
int num = 0;
while(N)
{
num += N % k;
N /= k;
}
return num;
}
int root(int N, int k)
{
if(N < k)
return N;
else
{
N = sum(N,k);
return root(N,k);
}
}