给定一个数字,我想修改数字的第N位数。
例如,给定1237645,我想从右边改变4 th 数字,在这种情况下是7,比如5。
我能想到的唯一方法就是这样做
N = 1237645
fourthDigit = (N / 1000) % 10
N -= fourthDigit * 1000 // make fourth digit 0
N += 5 * 1000 // make fourth digit 5
但这是非常低效的。有更好的方法吗?由于内存限制,我不能使用数组来表示N.
答案 0 :(得分:1)
您可以在一个算术运算中执行此操作:
N = 1237645
fourthDigit = (N / 1000) % 10
N -= (fourthDigit-5) * 1000
提供fourthDigit
> = 5,否则最后一行变为
N += (newDigit-fourthDigit)*1000
答案 1 :(得分:1)
这是嵌入式系统编程吗? 如果是,则尝试将数字存储为二进制编码的十进制(BCD),然后在需要时转换为二进制。从另一种方式来看,从BCD转换为二进制可能更容易。 另请参阅:http://homepage.divms.uiowa.edu/~jones/bcd/bcd.html
顺便说一句,就在这里和我在一起的房间是一个时钟,可以保持BCD的时间。这样,它不必除以10来显示。