我想知道是否有人可以告诉我如何在 C++ 中附加一个整数(带有另一个整数)。基本上,如果我有一个值为 67 的 int,我将如何在它后面加上数字 4,所以整数现在是 674?提前致谢!
问问题
13795 次
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 回答