-2

我遇到了一些编码问题。

我正在将串行输入读入我的程序,并将数字保存到一个数组中。

现在我想将此数组转换为整数进行计算,其中数组索引 0 表示一位数,索引 1 表示十位等。

Array[0] represents 1 digit
Array[1] represents 10 digit
Array[2] represents 100 digit
Array[3] represents 1000 digit
Array[4] represents 10000 digit
Array[5] represents 100000 digit

该数组是动态的,因此只能有 2 个索引。

4

4 回答 4

1

使用循环。您必须知道数字的长度或数组的长度。数组中未使用的位置应该是0.

int i;
long result = 0; // Choose a suitable integer type. 
for (i = length; i <= 0; --i) {
    result = result * 10 + Array[i];
}
于 2016-10-26T07:45:08.817 回答
0

如果所有数组条目都是0-9,并且它们的数据类型可以在没有强制转换的int情况下转换为,那么这可能对您有用:

#include <stdio.h>

int main (void) {

int lenght = 6;
int Array[lenght];
Array[0] = 9;
Array[1] = 4;
Array[2] = 5;
Array[3] = 8;
Array[4] = 1;
Array[5] = 0;
int pow = 1;
int val = 0;

for (int i = 0; i < lenght; i++) {
    val += Array[lenght-i-1] * pow;
    pow *= 10;
}

printf("Val is %d", val);
return 0;
}

注意:这是一种原始的、非错误处理的方法。它可能不适用于所有情况。

不使用的原因pow

pow不返回整数,导致隐式整数转换不准确。EG 100 可能是 99.9999,然后被截断为 99。

于 2016-10-26T07:44:00.760 回答
0

我不是 100% 确定你想要做什么,但这是你想要做的:

#include <stdio.h>

int main ( void )
{

    int numbers[] = { 1, 2, 3, 4, 5, 6 };
    int multiplier = 1;

    printf ( "First printout\n" );
    for ( int i = 0; i < 5; ++i )
        printf ( "Numbers[%i] = %i\n", i, numbers[i] );

    //this is where the numbers in the array are made into the 1, 10s, 100s etc
    for ( int i = 0; i < 5; ++i )
    {
        numbers[i] *= multiplier;
        multiplier *= 10;
    }

    printf ( "Second printout\n" );
    for ( int i = 0; i < 5; ++i )
        printf ( "Numbers[%i] = %i\n", i, numbers[i] );

    return 0;

}

几个月前我才开始学习C。我确信有更好的方法可以做到这一点,但这是一个似乎可以解决您的问题的解决方案。我希望这有帮助!

于 2016-10-26T08:01:56.867 回答
-1

数字代表十位的值。

Array[0]*1 + Array[1]*10 + Array[2]*100 ... etc.

你可以做一个循环来做到这一点。

int value = 0;
int pow = 1;
for(int i = 0; i<length; i++){

   value += Array[i]*pow;
   pow *=10;
}
于 2016-10-26T07:34:57.003 回答