3

我想知道是否有人可以告诉我如何在 C++ 中附加一个整数(带有另一个整数)。基本上,如果我有一个值为 67 的 int,我将如何在它后面加上数字 4,所以整数现在是 674?提前致谢!

4

6 回答 6

10

将第一个乘以十的第二个数字的幂,然后加上另一个。

示例:63 和 5

63*10=630
630+5 =635

示例:75 和 34

75*100=7500
7500+34=7534
int i1=75;
int i2=34;
int dn=ceil(log10(i2+0.001));     //0.001 is for exact 10, exact 100, ...
int i3=i1*ceil(pow(10,dn)); <---- because pow would give 99.999999(for some optimization modes)
i3+=i2;

编辑:字符串版本需要 2 个 int 到 str 的转换(很慢)和 1 个字符串连接(不快)和 1 个 str 到 int 的转换(很慢)。上转换需要 2 次加法、1 次对数、2 次上限、1 次幂、1 次乘法,所有这些都可以在 cpu 中完成,而无需接触主内存来获取/设置子步骤的数据,这肯定比字符串版本的延迟更短。如果编译器设计将 3-4 个字符串存储在 sse 寄存器中,那么两者都会竞争性能。因为当一个人忙于计算“power”函数时,另一个人忙于从 sse 中提取字符串并一个一个地放置必要的寄存器,并通过开始加法和乘法来构建另一个寄存器。Power(10,x) 函数可以换成 10*10*10.... x 次,所以纯数学版本再次变得更快。

如果您需要可读性,那么 eq- 的答案是最好的 imo。

于 2012-09-02T19:24:27.463 回答
9
int appended = std::stoi(std::to_string(i1) + std::to_string(i2));
// error checking left as an exercise
于 2012-09-02T19:23:52.457 回答
2
#include <iostream>
#include <string>

int appendDigit(int base, int append) {
   std::string sBase = std::to_string(base);
   std::string sAppend = std::to_string(append);
   std::string result = sBase + sAppend;
   return std::stoi(result);

}

int main() {
   int a = 67;
   int b = 4;
   int c = appendDigit(a,b);
   std::cout << c;
}
于 2012-09-02T19:28:32.997 回答
1

计算现有数字的位数,乘以它的十次方并添加到第二个数字。

于 2012-09-02T19:24:59.887 回答
0
int append_digits(int i1, int i2) {
    int result = 0;
    while (i1) {
        result *= 10;
        result += i1 % 10;
        i1 /= 10;
    }
    while (i2) {
        result *= 10;
        result += i2 % 10;
        i2 /= 10;
    }
    int final_result = 0;
    while (result) {
        final_result *= 10;
        final_result += result % 10;
        result /= 10;
    }
    return final_result;
}

重构以减少代码重复留给读者作为练习。

于 2012-09-02T20:11:02.377 回答
0

这里有一个更严重的:

int append_digits(int i1, int i2) {
    int i2_copy = i2;
    while (i2_copy) {
        i1 *= 10;
        i2_copy /= 10;
    }
    return i1 + i2;
}

这避免了浮点数学和字符串转换。

于 2012-09-02T20:13:43.687 回答