2012-09-02 47 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; 
} 

這避免了浮點運算和字符串轉換。