将两个数字合二为一.示例:123和456变为123456

jia*_*ake 18 c++ formatting parsing

在C++中,如何将两个整数组合(注意:不添加)成一个大整数?

例如:

int1 = 123;
int2 = 456;
Run Code Online (Sandbox Code Playgroud)

是否有一个函数来取两个数字并将intCombined转换为123456?

编辑:

我不好解释清楚.如果int2为0,则答案应为123,而不是1230.实际上,如果int2超过32位限制,则int1(左侧的数字)将只有一个值.所以当int2为0时,int1为0(或垃圾,我不确定).

sth*_*sth 19

你需要将第一个数乘以10的幂是最小的,大于第二个数:

int combine(int a, int b) {
   int times = 1;
   while (times <= b)
      times *= 10;
   return a*times + b;
} 
Run Code Online (Sandbox Code Playgroud)


Jan*_*sen 9

你可以将它们转换为字符串,组合它们然后将它们转换回int吗?

  • 你当然可以,但这一定是最慢的方法之一 (2认同)

R S*_*hko 7

对于每个数字int2,您可以int1乘以10然后添加int2:

// merge(123, 0) => 1230
int merge(int int1, int int2)
{
    int int2_copy = int2;
    do
    {
        int1 *= 10;
        int2_copy /= 10;
    } while (int2_copy);

    return int1 + int2;
}
Run Code Online (Sandbox Code Playgroud)

你可以使用log10和摆脱循环ceil.


Noe*_*oel 7

如果您尝试组合的数字是正整数,则可以使用配对功能.

配对功能从两个创建一个唯一的数字.它也是一种可逆功能.

x,y -> z
z -> x,y

z = (x+y)(x+y+1)/2 + y
Run Code Online (Sandbox Code Playgroud)

然后反过来是:

w = floor((sqrt(8z+1)-1)/2)
t = (w*w + w)/2
y = z - t
x = w - y
Run Code Online (Sandbox Code Playgroud)

注意.以上不是任何特定语言.只是一些数学......


csj*_*csj 6

假设两个int都是非负的,并且int1在左边,而int2在右边,你需要弄清楚long int2有多少位数,将int1乘以10多次,然后添加它们.

unsigned int int1 = blah;
unsigned int int2 = blah;

unsigned int temp = int2;

do
{
    temp /= 10;
    int1 *= 10;
} while (temp >0)

unsigned int newInt = int1 + int2;
Run Code Online (Sandbox Code Playgroud)

  • @Germ:这是常见的解决方案,我怀疑很多人都在写它.我写的是与Samuel相同的东西(尽管我使用的是log10和ceil),但是当我看到他发布它时就停止了.csj碰巧比我快一点. (2认同)