0

我在尝试将整数数组连接成一个数字时遇到了一些麻烦。我了解如何使用单个数字(我的代码如下)来执行此操作,但是如果我提示用户输入 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

先谢谢了。

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 回答