如何在C++中追加整数(用整数)

qfe3c7zg  于 2022-12-27  发布在  其他
关注(0)|答案(7)|浏览(226)

我想知道是否有人能告诉我如何在C++中附加一个整数(和另一个整数),基本上,如果我有一个int,值是67,我该如何附加数字4,这样整数就变成了674?

zzlelutf

zzlelutf1#

将第一个数字乘以第二个数字的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-的答案是最好的imo。

pprl5pva

pprl5pva2#

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

k75qkfdt3#

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

vuktfyat4#

计算现有数字的位数,乘以其十次幂,并与第二个数字相加。

mznpcxlj

mznpcxlj5#

下面是一个更严重的问题:

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

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

kmb7vmvb

kmb7vmvb6#

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

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

xoshrz7s

xoshrz7s7#

c++代码:

int appendNum(int a, int b){
    int numOfDigitInb = log10(b)+1;
    int x = round(pow(10, numOfDigitInb)); 
    return a*x+b;  
}

相关问题