如何在C语言中连接两个整数

13 浏览
0 Comments

如何在C语言中连接两个整数

Stack Overflow在很多其他语言中都回答了这个问题,但没有C语言。所以我想问一下,因为我遇到了同样的问题。

在C语言中如何将两个整数连接起来?

示例:

x = 11;
y = 11;

我想要得到的z如下所示:

z = 1111;

其他示例尝试使用字符串来实现这一目的。有没有一种不使用字符串的方法来做到这一点?

因为在我特定的用法中,这将进入一个对时间非常敏感的代码部分,所以我正在寻找一种高效的方法来实现这个。

提前感谢!

0
0 Comments

如何在C语言中连接两个整数

这可能不是一种最优或最快的解决方案,但没某些情况下过它,它是一个简单的解决方案,可能很有用。

你可以使用sprintf()strtol()

char str[100];
int i=32, j=45;
sprintf(str, "%d%d", i, j);
int result=strtol(str, NULL, 10);

首先使用sprintf()将两个数字依次写入一个字符串中(就像你使用printf()打印到标准输出一样),然后使用strtol()将结果字符串转换为数字。

strtol()返回一个long,它可能是一个大于可以存储在int中的值,所以你可能想要先检查结果值。

int result;
long rv=strtol(str, NULL, 10);
if(rv>INT_MAX || rv

如果strtol()返回的值不在int的范围内(即不在(包括)INT_MININT_MAX之间),则发生错误。其中INT_MININT_MAX来自limits.h

如果字符串中的值太大,无法表示为long,则会因为溢出而将errno设置为ERANGE(来自errno.h)。

这里了解有关strtol()的更多信息。

编辑:

正如chqrlie的启示性评论指出的,负数会导致这种方法出现问题。

你可以使用这个方法或对它进行修改来解决这个问题。

char str[100], temp[50];
int i=-32, j=45, result;
sprintf(temp, "%+d", j);
sprintf(str, "%d%s", i, temp+1);
long rv=strtol(str, NULL, 10);

首先将第二个数字与其符号一起打印到字符数组temp中。

%+d中的+将导致数字的符号被打印出来。

现在将第一个数字和第二个数字打印到str中,但不包括第二个数字的符号部分。我们通过忽略temp中的第一个字符来跳过第二个数字的符号部分。

最后进行strtol()

这是一种处理潜在溢出的好方法。添加相应的代码,设置和测试errno,并将结果与INT_MININT_MAX进行比较将会很有帮助。ij的负值也会导致问题。

感谢您抽出时间告诉我们这个问题。我没有考虑到负数的问题。或者查看INT_MIN的需要。

if(rv>INT_MAX || rv应该是if(rv>LONG_MAX || rv。一般来说,这无法检测strtol("!!!", ...)中的错误,因为errno并不一定被设置。

0
0 Comments

问题的出现原因:在C语言中,如果要将两个整数连接起来,可以使用乘法和加法运算。但是,当两个整数的位数不同时,直接相加可能会导致结果错误。解决方法是通过一些数学计算来确保正确连接两个整数。

解决方法:首先,需要确定第二个整数的位数。可以通过计算log10(y)+1来获取,其中y是第二个整数。然后,将第一个整数乘以10的位数次幂,将其“移位”。最后,将移位后的第一个整数和第二个整数相加,得到连接后的结果。

具体代码如下:

int digits = log10(y) + 1;
int shifted = x * pow(10, digits);
z = shifted + y;

或者可以将上述代码合并为一行:

z = x * pow(10, (int)log10(y) + 1) + y;

这样,通过使用数学计算和整数运算,可以确保正确地连接两个整数。避免了使用浮点数运算而引起的问题。

0
0 Comments

问题的原因是作者想要在C语言中将两个整数连接起来,但是之前的解决方法在某些情况下会出现错误。解决方法是修改代码中的一行,添加了一个条件判断,以避免出现无限循环的情况。

在之前的代码中,作者使用了一个循环来计算一个数的幂,然后将第一个整数乘以这个幂再加上第二个整数,从而实现连接两个整数的功能。然而,在某些情况下,这个循环可能会无限进行下去,导致程序陷入死循环。为了解决这个问题,作者在循环中添加了一个条件判断,当幂的值超过了无符号整数的最大值的十分之一时,就直接返回第二个整数。

这个修改后的代码可以解决之前版本中出现的无限循环的问题,并且在测试中通过了所有的正确性测试。作者还提到,这个修改后的代码相比于之前的版本,在某些情况下可能会更快。然而,作者也指出了浮点数运算的开销可能会比大多数人认为的要小。

问题的原因是之前的代码中存在一个潜在的无限循环的问题,解决方法是在循环中添加了一个条件判断,以避免出现无限循环的情况。还有对代码进行性能测试的结果,并解释了为什么选择这种修改后的代码。

0