Math 找到第十个';s与整数等价的位置

Math 找到第十个';s与整数等价的位置,math,floating-point,integer,floating-point-conversion,integer-arithmetic,Math,Floating Point,Integer,Floating Point Conversion,Integer Arithmetic,一个人如何通过计算和动态推导出整个整数的“th”位等价物?e、 g: 187为0.187 16等于0.16 900041等于0.900041 我知道有人需要精确计算th的位置。我知道一个技巧是将整数转换成字符串,计算有多少个位置(通过有多少个单独的字符),然后创建我们的未来值,然后乘以导出的第十个值-就像我们在纸上和笔上所做的那样-例如: char integerStr[7] = "186907"; int strLength = strlen(integerStr); double ths

一个人如何通过计算和动态推导出整个整数的“th”位等价物?e、 g:

  • 187为0.187
  • 16等于0.16
  • 900041等于0.900041
我知道有人需要精确计算th的位置。我知道一个技巧是将整数转换成字符串,计算有多少个位置(通过有多少个单独的字符),然后创建我们的未来值,然后乘以导出的第十个值-就像我们在纸上和笔上所做的那样-例如:

char integerStr[7] = "186907";
int strLength = strlen(integerStr);
double thsPlace = 0.0F;
for (int counter = 0; counter < strLength; ++counter) {
    thsPlace = 0.1F * thsPlace;
}
char integerStr[7]=“186907”;
int strLength=strlen(整数tr);
双thsPlace=0.0F;
用于(int计数器=0;计数器
但解决这个问题的非字符串算术方法是什么?

伪代码:

n / pow(10, floor(log10(n))+1)
伪代码:

n / pow(10, floor(log10(n))+1)

重复将原始值除以10,直到小于1:

int x = 69105;
double result = (double) x;
while (x > 1.0) x /= 10.0;
/* result = 0.69105 */

注意,这对负值不起作用;对于这些,您需要对绝对值执行算法,然后对结果求反。

重复将原始值除以10,直到小于1:

int x = 69105;
double result = (double) x;
while (x > 1.0) x /= 10.0;
/* result = 0.69105 */

注意,这对负值不起作用;对于这些,您需要对绝对值执行算法,然后对结果求反。

[为奇怪的缩进而编辑]

我不确定你的问题到底是什么意思,但以下是我要做的:

int placeValue(int n)
{
    if (n < 10)
    {
        return 1;
    }
    else
    {
        return placeValue(n / 10) + 1;
    }
}
intplacevalue(intn)
{
如果(n<10)
{
返回1;
}
其他的
{
返回位置值(n/10)+1;
}
}

[这是一种递归方法]

[为奇怪的缩进而编辑]

我不确定你的问题到底是什么意思,但以下是我要做的:

int placeValue(int n)
{
    if (n < 10)
    {
        return 1;
    }
    else
    {
        return placeValue(n / 10) + 1;
    }
}
intplacevalue(intn)
{
如果(n<10)
{
返回1;
}
其他的
{
返回位置值(n/10)+1;
}
}

[这是一种递归方法]

我不知道
pow(10,x)
版本的性能如何,但您可以尝试使用整数算法来完成大部分操作。假设我们只处理正值或0(如有必要,使用绝对值):

int除数=1;
while(除数0)
返回(双)x/除数;

请注意,上面需要一些保护措施,即检查除数是否有溢出(在这种情况下,它将是负数)、x是否为正数等等。但我假设您可以自己做。

我不知道
pow(10,x)
版本的性能如何,但您可以尝试使用整数算法来完成大部分工作。假设我们只处理正值或0(如有必要,使用绝对值):

int除数=1;
while(除数0)
返回(双)x/除数;

请注意,上面需要一些保护措施,即检查除数是否有溢出(在这种情况下,它将为负)、x是否为正等等。但我假设您可以自己做。

Doy!很简单。负值很容易通过适当的控制结构进行检查。谢谢多伊!很简单。负值很容易通过适当的控制结构进行检查。谢谢这可能会超过公认的答案(实质上)。事实上,我发现这更好,因为上面的评论(只是注意到:我在工作,来回切换),但我担心它的易读性可能会放错一些地方,尽管它基本上是“将n除以10的幂(log10n-或者,有多少个10适合n)”谢谢你的投票。我最近不得不做一些类似的事情,将数字四舍五入到有效数字的x数你想要
floor(log10(n))+1而不是
ceil(log10(n))
?在我看来,例如,
1
应该映射到
0.1
。这可能会超过公认的答案(实质上)。我实际上发现这更好,因为上面的评论(只是注意到:我在工作,来回切换),但我担心它的易读性可能会放错一些地方,尽管它基本上是可读的“将n除以10的幂(log10n-或者,多少个10的幂等于n)”谢谢你的投票。我最近不得不做一些类似的事情,将数字四舍五入到x个有效数字。你想要
floor(log10(n))+1
而不是
ceil(log10(n))
?在我看来,
1
应该映射到
0.1