对于给定的数字
unsigned int a = 1203;
仅对上面的示例
增加最高有效十进制数字a = 2203;
如何实现这一目标?
我开始喜欢这个for (n=a; n; n/=10){ b = n%10;}
这给msb然后递增b ++;
但未能将整个数字放回去?
有没有像& 0xf000这样的替代品给msb但是整数可以是0到INT_MAX范围内的任何东西吗?
答案 0 :(得分:4)
你实际上非常接近。
int x = 1;
for (n=a; n; n/=10) {
x *= 10;
}
a += x;
答案 1 :(得分:1)
没有额外变量 n 的变体:
int x = 1;
while (x <= a/10) x *= 10;
a += x;
(编辑)这应该稍快一些,因为它会删除比较循环中的 d 分区,并在其后只添加一个分区:
int x = 1;
while (x <= a) x *= 10;
x /= 10;
a += x;
答案 2 :(得分:0)
唯一的解决方案是弄清楚你有多少位数(通常除以10 - 或者基数是什么) - 当你有最高位数时,加1,然后重新组合数字(或弄清楚最高位数是多少1,但你仍然需要知道你有多少位数。