2013-03-03 45 views
0

我尝试将整数数组连接成一个数字时遇到了一些麻烦。我明白如何用单个数字号码(我的代码如下)做到这一点,但如果我提示用户输入5个数字并且他们输入了12,345,552,126和44,我该怎么办?我需要开发一种算法,用户输入并连接它使一个整数,就像这样1234555212644在c中连接整数数组

#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和

感谢。

+3

只需使用'printf(“%d”,num [i])循环数组中的所有数字;'并在最后输出一个换行符,它将显示为所有数字在数组被连接起来。 – dreamlax 2013-03-03 23:31:51

+8

'1234555212644'对于整数来说太大了。 – dasblinkenlight 2013-03-03 23:35:18

+0

我相信你可以将它们转换成字符,并使用strcat()将它们连接起来,这将为您节省算术。 – Varaquilex 2013-03-03 23:46:52

回答

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

+0

这个问题被标记为“c”,所以'stringstream'不幸的是不可及。 – dreamlax 2013-03-06 05:40:38

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如果想,那函数也将告诉你,如果数量太大,不适合。

+0

您可以直接写入'buf',而不是使用'strcat',你可以使用'sprintf'的返回值(或者更好的方法是使用'snprintf')来确定进入'buf'的时间。就像现在一样,每次添加一个数字时,'strcat'必须扫描整个字符串,所以数字越大,数字越多,'strcat'查找字符串末尾所用的时间就越长。 – dreamlax 2013-03-06 05:43:22