例如,我如何使用位运算符从123中删除2并返回13?我不知道该怎么做..有可能吗?提前谢谢。
发布于 2012-06-08 12:36:42
你所建议的是可能的,但这样做是没有意义的。下面是以位为单位的值表示(仅显示相关位,左边的所有值都是零):
2: 000010 || 123: 1111011 || 13: 001101
没有逻辑的方法可以通过位运算将123转换为13。最好将其转换为字符串或字符数组,删除这两个数组,然后将其转换回int。
发布于 2012-06-08 13:01:25
还有其他的情况吗?如果存在某种类型的模式,则可以将其推广到整数级别,否则,您实际上只是在寻找字符串替换。
123中的2实际上是2E1 (10100),而1234中的2将是2E2 (11001000),这两者都与2 (10)无关,至少在位形式上是这样。此外,需要将已删除号码右侧的“数字”添加到已删除号码/ 10左侧的数字。
也就是说,从123到13:
Located "2".
Number on left (x): 100
Number on right (y): 3
y + (x / 10) = 13从1324到134
Located "2"
Number on left (x): 1300
Number on right (y): 4
y + (x / 10) = 134除非有某种模式(即你知道数字的位置),否则在对结果进行.ToString()之前,你只需要先对数字进行int.Parse(),然后进行.Replace("2", "")。
编辑:有人对这个答案投了赞成票,我意识到我之前的实现不必要地复杂。在一个以10为基数的数中“迭代”数字相对简单,不应该需要递归。
下面是新的解决方案,性能更好,但这是一个巨大的微优化:
static int OmitDigit(int number, int digit) {
var output = 0;
var multiplier = 1;
while (number > 0) {
var n = number % 10;
number /= 10;
if (n != digit) {
output += (n * multiplier);
multiplier *= 10;
}
}
return output;
}结果:1554443
发布于 2012-06-08 13:20:38
因为我们使用的是以10为基数的数字,所以至少可以说,以2为基数的操作是丑陋的。使用一些数学方法,从k中删除第n位数字,并将其移位为
(k/pow(10,n))*pow(10, n-1) + k%pow(10, n-1)在基数2中,<<和>>运算符的作用类似于乘以pow(2, n),而带有掩码的&执行%的工作,但在基数10中,位不对齐。
https://stackoverflow.com/questions/10943087
复制相似问题