从值获取数字的最短路径

时间:2014-04-21 20:25:10

标签: ios objective-c numbers int digits

假设我有一个像134658这样的数字,我想要第3位(数百位)是“6”。

在Objective-C中获取它的最短长度代码是什么?

这是我目前的代码:

int theNumber = 204398234;
int theDigitPlace = 3;//hundreds place
int theDigit = (int)floorf((float)((10)*((((float)theNumber)/(pow(10, theDigitPlace)))-(floorf(((float)theNumber)/(pow(10, theDigitPlace)))))));

//Returns "2"

3 个答案:

答案 0 :(得分:2)

可能有更好的解决方案,但这个解决方案略短:

int theNumber = 204398234;
int theDigitPlace = 3;//hundreds place
int theDigit = (theNumber/(int)(pow(10, theDigitPlace - 1))) % 10;

在你的情况下,它将数字除以100得到2043982,然后"提取" 使用"余数运算符"的最后一个十进制数字; %

备注:解决方案假设pow(10, theDigitPlace - 1)的结果是 精确。这是有效的,因为double在iOS上有大约16个有效十进制数字和int 是一个32位数字,最多有10位十进制数。

答案 1 :(得分:1)

好老C怎么样?

int theNumber = 204398234;
char output[20];   //Create a string bigger than any number we might get.
sprintf(output, "%d", theNumber);
int theDigit = output[strlen(output)-4]-'0'; //index is zero-based.

那真的只有2条可执行行。

你的只有一行,但这是一个讨厌的,难以理解的表达,你已经到了那里,并使用非常慢的超越数学。

注意:已修​​复从右侧取第3位而不是从左侧取第3位。 (感谢@Maddy抓住我的错误)

答案 2 :(得分:1)

另一种使用整数数学和单行代码的解决方案:

int theNumber = 204398234;
int result = (theNumber/100) % 10;

这可能是目前提出的最快解决方案。

它将数百个位置向下移动到1s位置,然后使用模运算除去最低位十进制数字之外的所有内容。