拼接一个短整数的第一个和最后三个数字?

Posted

技术标签:

【中文标题】拼接一个短整数的第一个和最后三个数字?【英文标题】:Splice first and last 3 digits off a short integer? 【发布时间】:2012-01-25 04:20:41 【问题描述】:

我在这样的数组中有很多变量:short num = 7123;。该值始终为 4 位数字。如何把它变成a = 7; b = 123;

我能想到的只是转换为 c-string 并将其剥离,但似乎效率不高。

【问题讨论】:

【参考方案1】:
b = num % 1000;
a = num / 1000;

【讨论】:

@mcmcc 如果我们要进行微优化,我们应该添加 24,然后右移 10 并完全避免除法和取模...(这是安全的,因为短 int 可以容纳超过 4 位数字,所以没有溢出的机会) @bdares:这适用于前导 1,但不适用于较大的前导数字......? 7024 >> 10 不是 7。 @StilesCrisis 嗯,你是对的。我做错了什么...哦,您必须为每千位右移 10 加 24。...制作一个查找表。 @mcmcc:请参阅我对div() 的回答,这样可以节省手动计算结果。 @bdares:我将其表达为一种优化,但也可以说它的意图更清晰,不像您的查找表(无论如何这可能是反优化)。【参考方案2】:

C 标准库包含div(),它可以在一个操作中完成:

div_t r = div(num, 1000);
a = r.quot;
b = r.rem;

可以预期 C 标准库具有 div() 的优化实现,它将在一条机器指令中执行除法余数(在具有此类指令的 CPU 上)。

【讨论】:

【参考方案3】:
short a = num / 1000; 
short b = num % 1000;

【讨论】:

【参考方案4】:

很简单:

a = num / 1000;
b = num % 1000;

【讨论】:

【参考方案5】:
// cast to integer should drop the decimal
a = (int) ( num / 1000 );

// use variable a to subtract the thousand place to zero
b = a - num;

【讨论】:

以上是关于拼接一个短整数的第一个和最后三个数字?的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer把数组排成最小的数

剑指offer-把数组排成最小的数

计蒜客 单词拼接

代码题(40)— 缺失的第一个正数缺失数字

把数组排成最小的数

找到长度为n的第一个和最后一个数字,从数字d开始?