gpt4 book ai didi

combinations - 我怎样才能使用对数得到幂的相反数?

转载 作者:行者123 更新时间:2023-12-05 03:30:19 28 4
gpt4 key购买 nike

我在学校的数学一直不太好,我意识到我实际上需要与 pow(base, exponent) 函数相反的函数,该函数对某个数字进行乘方运算,例如 2 ^ 4 = 16

搜索答案我发现对数 log() 应该是幂的对数。现在,我发现写例如“log 2 of 32” 在代码中看起来像 log(32)/log(2)...但是如何将以下问题转化为对数?

我将编写一个快速的 C 程序来打印索引表,其中将打印所有字母字符并分配给每个索引从 0 到 26 ^ DIGITS

假设 DIGITS 设置为 1,表格的大小仅为 26(字母表从 A 到 Z 的长度),格式为 index[0] = A, index[1] = B, ... ... index [25] = Z。DIGITS 的计数给出 26 ^ DIGITS 组合

现在,我已经编写了这段代码:

#include <stdio.h>
#include <ctype.h>
#include <math.h>

unsigned int letterToIndex(char c);
char indexToLetter(unsigned int index);

int main(void)
{

printf("Printing Index table:\n\n");

const int DIGITS = 2;
const int ALPHABSIZE = 26;

int currentIdx = 0; // current index

const int endIndex = pow(ALPHABSIZE, DIGITS);

// this should be
//double bit5 = log(32) / log(2);
//printf("log(32) / log(2) AKA bit^5 should be: %f", bit5);

while (currentIdx < endIndex)
{

printf("index[%i] = ", currentIdx);

/*for (int i = 0; i < DIGITS; ++i)
{
//float logarithm = log( (currentIdx / ALPHABSIZE) % ALPHABSIZE ) / log(DIGITS);
float logarithm = log( currentIdx % ALPHABSIZE ) / log(DIGITS);

printf("%c", indexToLetter( (int) logarithm ));
}*/


// letter
//unsigned int idxLetter = letterToIndex(i) * ALPHABSIZE + letterToIndex(i+1);

///////////////////////////////////////////////////////////////////////////////
// I have an obvious pattern here vv

// here I print only 2 digits hard-coded
// prints the 1st digit
printf("%c", indexToLetter( (currentIdx / ALPHABSIZE) % ALPHABSIZE ));
// prints the 2nd digit
printf("%c", indexToLetter( currentIdx % ALPHABSIZE ));

// obvious pattern ^^
//////////////////////////////////////////////////////////////////////////////

printf("\n");
currentIdx++;
}


// if DIGITS are only 1 sized:
// index[0] = A
// index[1] = B
// index[2] = C
// index[3] = D
// index[4] = E
// ... ... ...
// index[25] = Z

// DIGITS having size of 2:
// index[0] = AA
// index[25] = AZ
// index[26] = BA = index[ 1 * 26 + 0 ] = index[26]
// index[30] = BE = index[ 1 * 26 + 4 ] = index[30]
// ... ... ...
// index[107] = ED = index[ 4 * 26 + 3 ] = index[107]

return 0;
}

// maps the ASCII range from 'A' = 0 to 'Z' = 25
unsigned int letterToIndex(char c)
{
return toupper(c) - 'A';
}

// get any letter from 0 to 25: from 'A' to 'Z'
char indexToLetter(unsigned int index)
{
return toupper(index + 65);
}

我已经注释掉 main 中的 for 循环(在 while block 中),这次硬编码为 printf currentIdx 的第一个数字,然后是它的第二个数字while 循环中的每次迭代。

但它让我印象深刻,就像它要求对数...我如何在 for 循环中自动执行此操作?我非常相信这两行,而不是两行 printf :

printf("%c", indexToLetter( (currentIdx / ALPHABSIZE) % ALPHABSIZE ));
printf("%c", indexToLetter( currentIdx % ALPHABSIZE ));

可以与正确的(也许是对数?)解决方案放在一行中。如果它是 DIGITS 大小 1,则只有第二行适用。大小为 3 的 DIGITS 要求与 3 的幂相反。显然是DIGITS

但是如何在循环中使用这种模式呢?假设 const int DIGITS(当前设置为 2)可以更改为更高。如何使其动态化,以便将每个数字的字母组合起来?

最佳答案

您可以从 pow(ALPHABSIZE, DIGITS - 1) 开始并使用整数除法来获取每个位值/表索引。在每个循环中,您连续减少 ALPHABSIZE 的因子,直到 1。这让您可以从左到右输出。

这里不需要计算对数。要计算整数对数,您仍然可以以相同的方式计算通过 while/for 循环的次数。

关于combinations - 我怎样才能使用对数得到幂的相反数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70843067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com