如何在C语言中将整数数组转换为整数?

10

如何将一个由6个整数组成的数组转换成单个整数。下面提供了示例。

数组:{0, 1, 2, 3, 4, 5, 6}

整数:123456

谢谢!


1
你尝试了什么?另外,如果你走到了这一步,你会发现前导零会消失:例如,在你的例子中,整数将是 123456。这是有充分理由的,不应该让你感到惊讶。 - Reinstate Monica -- notmaynard
7
你的意思是一组数字吗?让我来告诉你十进制系统的原理:数值=数字(n)+10*数字(n-1)+100*数字(n-2)+...+10^n*数字(0) - Eugen Rieck
此外,你的例子有七个整数。数组的大小是固定的还是会改变? - Reinstate Monica -- notmaynard
2
请注意算术溢出。 - Netherwire
如果每次问这个完全相同的问题都能得到一分钱... - user529758
显示剩余2条评论
8个回答

18

试一下:

int i, k = 0;
for (i = 0; i < n; i++)
    k = 10 * k + a[i];

其中n是数组的长度。虽然如此,但当数组足够短时才成立,否则你将会遇到int溢出。


1
int a[]={1,3,5,234,1,5,3}; 没有提及边界,但可能会成为一个问题 :) - ryyker

1
这是一个我制作的函数。
int array_to_num(int arr[],int n){
    char str[6][3];
    int i;
    char number[13] = {'\n'};

    for(i=0;i<n;i++) sprintf(str[i],"%d",arr[i]);
    for(i=0;i<n;i++)strcat(number,str[i]);

    i = atoi(number);
    return i;
} 

其中str[6][3]表示有6个元素可以容纳2位数字,根据需要进行更改。此外,n是您放入函数中的数组的大小。 使用方法如下:

int num[6] = {13,20,6,4,3,55};
int real_num;
real_num = array_to_num(num,6);

real_num将变为132064355


算术溢出怎么办? - CinCout

1

try this one:

#include <stdio.h>
#include <math.h>

int main()
{
    int arr[] = {1, 2, 2, 43, 4, 27};
    int size = sizeof(arr)/sizeof(arr[0]);
    int n = 0;
    int number  = 0;
    int val  = 0;
    while(n <size)
    {
        val = arr[n];
        while(val!= 0)
        {
            val = val/10;
            number = number*10;
        }
        number = number + arr[n];
        n++;
    }
    printf("%d", number);
    return 0;
}

0
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv){
    int n;
    char buff[100];

    sprintf(buff,"%d%d%d%d%d%d%d", 0, 1,2, 3, 4, 5, 6);
    n = atoi(buff);

    printf("the number is %d",n);

}

另一个版本

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv){
    int n;
    int i;
    char buff[100];
    int x[]={0,1,2,3,4,5,6};
    for (i=0; i<7; i++) {
        sprintf(&buff[i],"%d",x[i]);
    }
    n = atoi(buff);

    printf("the number is %d",n);

}

0
请注意,整数值的范围为:-2,147,483,648到2,147,483,647。
任何数组中的数字列表(如您所描述的)都需要比int更大的东西来保存表示该值的数字位数大于10的值,然后第一个数字只能是2或更小,依此类推...(如果您想要更多数字,请使用__int64

这将返回由int数组元素组成的整数...

(请注意,这里没有考虑负值等情况)

#include <ansi_c.h>
int ConcatInts(int *a, int numInts);
int main(void)
{
    int a;
    int m[]={1,2,3,4,5,6,7,8,9};
    int size = sizeof(m)/sizeof(m[0]);

    a = ConcatInts(m, size); //a = 123456789

    return 0;   
}

int ConcatInts(int *a, int numInts)
{
    int i=0, size;
    int b=0;
    int mult = 1;
    size = sizeof(a)/sizeof(a[0]);
    for(i=0;i<numInts;i++)
    {
        if((a[i] < 0) ||(a[i]>9)) return -1;
        if(i==0)
        {
            b += a[i];
        }
        else
        {
            b *= 10;
            b += a[i];
        }
    }
    return b;
}

特殊情况测试 if (i==0) 不必要,因为 b 最初为 0,所以 10*b 也是 0。更重要的是:你不能在数组指针上使用 sizeof。幸运的是,它只会添加无用代码。 - Jongware

0
也许可以将数组值转换为字符串,然后在需要时强制转换为整数?当然,要注意限制,如前所述。

0
为什么不直接将int[]中的每个元素转换为字符串,然后将这些字符串相加,最后再将其转换回整数呢?

谢谢您的想法。但最好将其作为问题的评论。 - mohammad javad ahmadi

0
int k = 0;
for (int i = A.length; i > 0; i--){
    k += 10 * i * A[A.length - i];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接