0

整数の配列を1つの数値に連結しようとすると問題が発生しました。1桁の数字(以下の私のコード)でこれを行う方法を理解していますが、ユーザーに5つの数字を入力するように促し、12、345、552、126、44を入力した場合はどうなりますか?ユーザーは入力して連結し、この1234555212644のように1つの整数を作成します

#include<stdio.h>

int main(void)
{

    int num[3]={1, 2, 3}, n1, n2, new_num;

    n1 = num[0] * 100;
    n2 = num[1] * 10;

    new_num = n1 + n2 + num[2];

    printf("%d \n", new_num);

    return 0;
}

出力:123

よろしくお願いします。

4

2 に答える 2

1

@dreamlaxの提案は、整数のみを出力しようとしている場合には理にかなっていますが、質問を単純化し、実際に実際の整数が必要な場合は、対数を使用して数値の桁数を決定できます。

int concat(int* arr, size_t len)
{
    int result = 0;

    for (int i = 0; i < len; i++)
    {
        int digits = floor(log10(arr[i])) + 1;
        result *= pow(10, digits);
        result += arr[i];
    }

    return result;
}

これはIdeone.com のデモです。

しかし実際には、そのような大きな整数を格納するためのスペースがすぐに不足してしまいます。このような大きな整数のストレージが必要な場合は、char 配列を使用sprintfし、ループ内で使用して数字を連結するか、またはstringstream.

于 2013-03-03T23:43:24.970 に答える
0

このようなものは、長い数に対して機能します。ここにはエラーチェックはありません。説明のためです。

int main(int argc, char **argv)
{   
    int num[] = {12, 345, 552, 126, 44};
    char buf[1000] = ""; // max size of number in digits - 1
    char n[10] = ""; // max size of individual number - 1

    for (int i = 0; i < sizeof(num)/sizeof(num[0]); i++) {
        sprintf(n, "%d", num[i]);
        strcat(buf, n);
    }

    printf("Number: %s\n", buf);

    return 0;
}

また、必要に応じて strtoll を使用して、文字列番号を大きな整数 (例: unsigned long long) に簡単に割り当てることもできます。

于 2013-03-03T23:58:36.593 に答える