19

Stack Overflow では、この質問は他の多くの言語で回答されていますが、C では回答されていません。同じ問題があるので、質問したいと思いました。

Cで2つの整数をどのように連結しますか?

例:

x = 11;
y = 11;

z を次のようにお願いします。

z = 1111;

他の例では、文字列でこれを実行しようとしています。文字列なしでこれを行う方法は何ですか?

私の特定の使用法では、これはコードのタイムクリティカルな部分に入るため、Cでこれを行う効率的な方法を探しています。

前もって感謝します!

4

10 に答える 10

44
unsigned concatenate(unsigned x, unsigned y) {
    unsigned pow = 10;
    while(y >= pow)
        pow *= 10;
    return x * pow + y;        
}

コンパイル/正確性/速度の証明

log10and関数は避けます。これらは浮動小数点を使用し、速度pow遅いと確信しているためです。多分。プロフィール。

于 2012-10-03T00:52:46.257 に答える
9
z = x * pow(10, log10(y)+1) + y;

説明:

最初に、2 番目に来る変数の桁数を取得します。

int digits = log10(y)+1;  // will be 2 in your example

次に、他の変数を 10^ 桁で乗算して「シフト」します。

int shifted = x * pow(10, digits);   // will be 1100 in your example

最後に、2 番目の変数を追加します。

z = shifted + y;   // 1111

または1行で:

z = x * pow(10, (int)log10(y)+1) + y;
于 2012-10-03T00:58:03.800 に答える
2
int myPow(int x, int p)
{
     if (p == 0) return 1;
     if (p == 1) return x;

     int tmp = myPow(x, p/2);
     if (p%2 == 0) return tmp * tmp;
     else return x * tmp * tmp;
}
int power = log10(y);
z = x*myPow(10,power+1)+y;

ここで、恥知らずにhttps://stackoverflow.com/a/1505791/1194873から myPow をコピーしました

于 2012-10-03T00:51:39.473 に答える
1

これを行う別の方法は次のとおりです。

int concat(int x, int y) {
    int temp = y;
    while (y != 0) {
        x *= 10;
        y /= 10;
    }
    return x + temp;
}

誰があなたがどのようなパフォーマンスを得るかを知っています。試してみてください。

于 2012-10-03T11:44:34.180 に答える
0

多分これはうまくいくでしょう:

int x=11,y=11,temp=0;
int z=x;
while(y>0)
{
    // take reciprocal of y into temp
    temp=(temp*10)+(y%10);       
    y=y/10;
}
while(temp>0)
{
    // take each number from last of temp and add to last of z
    z=(z*10)+(temp%10);      
    temp=temp/10;
}

コードは長いですが、シンプルです。間違いがあれば訂正してください。

于 2012-10-03T03:49:07.247 に答える
-3
#include<iostream>
using namespace std;

int main()
{
    int a=0,b=0,count=0,c=0,t=0;
    cout<<"enter 2 no"<<endl;
    cin>>a>>b;
    t=b;

    while(b!=0)
    {
        b=b/10;
        count++;
    }

    while(count!=0)
    {
        a=a*10;
        count--;
        c=a+t;
    }

    cout<<"concate no is:"<<c;
}
于 2014-09-21T13:42:35.347 に答える