在C语言中将int数组转换为int值

4

我有一个整数数组

int number[] = {1,2,3,4};

我该如何将int x = 1234转换成C语言版本?


在循环中:将其转换为字符串,然后连接它们。还有其他方法吗? - Pieter Geerkens
查找位置表示法 - Charles Salvia
7个回答

10
x = 1000*number[0] + 100*number[1] + 10*number[2] + number[3];

这基本上是十进制数的工作原理。更一般的版本(当您不知道'number'有多长时)如下:

int x = 0;
int base = 10;
for(int ii = 0; ii < sizeof(number); ii++) x = base*x + number[ii];
注意 - 如果base不是10,上面的代码仍然可以工作。当然,如果您使用通常的cout<<x打印出x,您将得到令人困惑的答案。但在其他时候它可能会对您有用。当然,您确实希望检查number[ii]是否在0到9之间(包括0和9)- 但这在您的问题中已经隐含了。不过,良好的编程需要检查、检查和再检查。我相信您可以自己添加这一部分内容。

3
+1 给一个很棒的基础数学解决方案。我能给两个赞吗?优雅! - Nico
我会将sizeof(number)赋值给一个变量,而不是每次都计算它。 - Nico
2
@nickecarlo - sizeof 在编译时计算,因此我认为没有额外开销。请参见https://dev59.com/cHE85IYBdhLWcg3wx2n2 - Floris
呵呵,谢谢。我买了我的教授的习惯,没有任何疑问地作为好的实践。 - Nico

2
int i = 0, x = 0;
for(; i < arrSize; i++)
    x = x * 10 + number[i];

x 是结果。


2
int i;
int x = 0;
for ( i = 0; i < 4; i++ )
    x = ( 10 * x + number[i] );

2
int number[]={1,2,3,4}
int x=0,temp;
temp=10;
for(i=0;i<number.length;i++)
    {
        x=x*temp+number[i];
    }
cout>>x;

非常感谢大家的快速回复 :) - Eagle

2
你可以通过将数字乘以十来将其向左“移动”。你可以通过在“移动”之后添加数字来追加一个数字。
因此,你最终会得到一个循环,其中你执行total *= 10,然后执行total += number[i]
当然,这仅适用于数组是数字的情况。如果数组是字符,则需要执行number[i] - '0',如果它是不同基数的数字,则需要乘以不同的数字(例如,如果它是八进制,则为8)。

1
你可以使用for循环和10的幂来实现某些操作。
int tens = 1;
int final = 0;
for (int i = arrSize - 1; i <= 0; ++i)
{
    final += tens*number[i];
    tens*=10;
}
return final;

1

答案很简单。只需在此处列出完整的函数。

int toNumber(int number[],arraySize)
{
   int i;
   int value = 0;
   for(i = 0;i < arraySize;i++)
   {
      value *=10;
      value += number[i];
   }
   return value;
}

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