处理 n^n (1 ≤ n ≤ 10^9) 值的优化方式
我用过long long int
,但它不够好,因为值可能是 (1000^1000)
搜索并找到了http://gmplib.org/GMP library
但BigInt class
不想使用它们。我正在寻找一些数值方法来处理这个问题。
我需要打印的第一个和最后一个k (1 ≤ k ≤ 9) 位n^n
对于前k个数字,我得到如下所示(这样做有点丑陋)
num = pow(n,n);
while(num){
arr[i++] = num%10;
num /= 10;
digit++;
}
while(digit > 0){
j=digit;
j--;
if(count<k){
printf("%lld",arr[j]);
count++;
}
digit--;
}
并且对于最后k位使用num % 10^k
如下所示。
findk=pow(10,k);
lastDigits = num % findk;
enter code here
k的最大值是9。所以我最多只需要18位数字。我想在没有真正解决完整的 n^n 表达式的情况下获得这 18 位数字。
任何想法/建议?