2012-09-02 43 views
0

我想知道是否有人能告诉我如何在C++中追加一个整数(与另一个整数)。基本上,如果我有一个int值67,我将如何将它附加到数字4,现在整数是674?提前致谢!如何在C++中追加整数(使用整数)

+0

在哪个基地? – Tibor

回答

7

将第一乘以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中提取字符串,并逐个放入必要的寄存器,并通过开始加法和乘法来构建另一个寄存器。 Power(10,x)功能可以交易10 * 10 * 10 .... x次,纯数学版本再次变得更快。

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

+0

你可以通过'ceil(log10(i1))得到数字的位数' – Tibor

+0

你是对的。添加。 –

+4

小心'log10(10)'正好是1,所以结果可能不正确。也许'ceil(log10(i1 + .1))' – Tibor

8
int appended = std::stoi(std::to_string(i1) + std::to_string(i2)); 
// error checking left as an exercise 
+0

我该用数字/变量替换什么? – Toby

1

计算现有数字的数字,乘以其十次方,然后加上第二个数字。

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; 
} 
+1

+1的详细程度。 – Tibor

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; 
} 

重构,以减少重复代码就留给读者自己练习。

0

这里有一个更严重的一个:

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

这避免了浮点运算和字符串转换。