我想知道是否有人可以告诉我如何在C ++中附加一个整数(带有另一个整数)。基本上,如果我有一个这个值为67的int,我怎么用数字4附加它所以整数现在是674?提前谢谢!
答案 0 :(得分:8)
int appended = std::stoi(std::to_string(i1) + std::to_string(i2));
// error checking left as an exercise
答案 1 :(得分:8)
首先乘以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寄存器中,那么两者都将争夺性能。因为当一个人忙于计算“功率”功能时,其他人将忙于从sse中提取字符串并逐个放入必要的寄存器并通过开始加法和乘法在另一个寄存器上构建。功率(10,x)功能可以交易10 * 10 * 10 .... x次,因此纯数学版本再次变得更快。
如果你需要的是可读性,那么eq-的回答是最好的。
答案 2 :(得分: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;
}
答案 3 :(得分:1)
计算现有数字的位数,乘以其第十个幂并添加到第二个数字。
答案 4 :(得分: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;
}
重构以减少代码重复是留给读者的练习。
答案 5 :(得分:0)
这是一个更严重的问题:
int append_digits(int i1, int i2) {
int i2_copy = i2;
while (i2_copy) {
i1 *= 10;
i2_copy /= 10;
}
return i1 + i2;
}
这可以避免浮点数学和字符串转换。