假设我有一个像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"
答案 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位置,然后使用模运算除去最低位十进制数字之外的所有内容。