在c中连接整数数组

时间:2013-03-03 23:29:30

标签: c

我在尝试将整数数组连接成一个数字时遇到了一些麻烦。我知道如何使用单位数字(我的代码如下),但如果我提示用户输入5个数字并输入12,345,552,126,44怎么办。我需要开发一个算法用户输入并连接它以产生一个整数,如1234555212644

#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

先谢谢。

2 个答案:

答案 0 :(得分: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;
}

这是an Ideone.com demo

然而,确实,你很快就会耗尽空间来存储这么大的整数。如果您需要存储这么大的整数,您可能需要考虑使用char数组并在循环中使用sprintf来连接数字,或stringstream

答案 1 :(得分: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),并且该函数还会告诉您该数字是否太大而不适合。