010*_*101 17 c math optimization mathematical-optimization
Stack Overflow用许多其他语言回答了这个问题,但不是C.所以我想我会问,因为我有同样的问题.
如何在C中连接两个整数?
例:
x = 11;
y = 11;
Run Code Online (Sandbox Code Playgroud)
我想z如下:
z = 1111;
Run Code Online (Sandbox Code Playgroud)
其他示例尝试使用字符串执行此操作.没有字符串的方法是什么?
我正在寻找一种在C中执行此操作的有效方法,因为在我的特定用法中,这将成为代码的时间关键部分.
提前致谢!
Moo*_*uck 37
unsigned concatenate(unsigned x, unsigned y) {
unsigned pow = 10;
while(y >= pow)
pow *= 10;
return x * pow + y;
}
Run Code Online (Sandbox Code Playgroud)
我避免使用log10和pow函数,因为我很确定它们使用浮点并且速度很慢,所以在你的机器上这可能会更快.也许.轮廓.
z = x * pow(10, log10(y)+1) + y;
Run Code Online (Sandbox Code Playgroud)
说明:
首先,您获得应该变为第二的变量的位数:
int digits = log10(y)+1; // will be 2 in your example
Run Code Online (Sandbox Code Playgroud)
然后通过将其与10 ^位相乘来"移动"另一个变量.
int shifted = x * pow(10, digits); // will be 1100 in your example
Run Code Online (Sandbox Code Playgroud)
最后添加第二个变量:
z = shifted + y; // 1111
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
z = x * pow(10, (int)log10(y)+1) + y;
Run Code Online (Sandbox Code Playgroud)