如何将整数数组转换为整数值?

时间:2019-08-03 12:28:48

标签: c arrays string integer keypad

我有一个键盘,可用于在微控制器(atmega32 avr)中输入数字。用户将可以输入1、2或3位数字,因为我定义的输入范围为[0-999]。这些数字中的每个数字将存储在整数数组的位置。

因此,如果将我的数组定义为int d[3],并且用户依次输入2、6、9,我将得到d[0] == 2d[1] == 6和{{1} }。现在,我想用这些数字d[2] == 9{2, 6, 9}制成一个整数。我该怎么办?

3 个答案:

答案 0 :(得分:1)

以下答案应适用于任何语言。这将非常简单,我建议您对数组中的值设置格式略有不同。我认为,如果操作员输入这样的一位数字存储起来会更容易:{0, 0, 5}。如果它是两位数的数字,请像这样存储:{0, 5, 9}。最后,如果操作员输入一个三位数的数字,请按以下方式进行存储:{5, 9, 2}

最后,格式化数组后,可以使用以下逻辑来获取数字。例如,如果数组为arr = {5, 9, 8};,则可以执行以下操作将其作为数字获取:

arr[0] * 100 + arr[1] * 10 + arr[2]

如果您遵循我上面给出的格式建议,那将起作用。

答案 1 :(得分:0)

您可以通过将数字乘以其相应单位的幂来迭代创建数字。

例如:{2,6,9}可以表示为((2 * 10 ^ 2)+(6 * 10 ^ 1)+(9 * 10 ^ 0))

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


long power_10 (int exp)
{
    long res = 1;
    int  i;  

    for (i = 1; i <= exp; i++) {
        res = res * 10; 
    }   
    return res;
}

int main()
{
    int   arr[] = {2, 6, 9}; 
    int   i = 0;
    int   len = sizeof(arr)/sizeof(arr[0]);
    long  num = 0;

    for (i = 0; i < len; i++) {
        num += arr[i] * power_10((len - 1 - i));    
    }   
    printf("%ld\n", num);
}

答案 2 :(得分:0)

您有两个问题要解决,对吧?

  • 问题1:检测输入何时完成
  • 问题2:将数字数组转换为单个整数值

我可以看到两种解决问题1的方法:

  1. 用前哨结束输入。-键盘上是否有类似 Enter键的东西?
  2. 为输入添加超时。-每次读取后启动计时器。溢出可能表明用户输入完毕。

在两种情况下,您都可以计算用户在前哨/超时之前通知的位数。


现在我们只需要解决问题2:

如果您将数字存储在数组中的索引从零开始,从最高有效位到最低有效位,那么解决方案将如下所示:

// note: n_digits and d come from the solution of the first problem

int sum = 0;
for (int i = 0; i < n_digits; ++i) {
    sum = sum*10 + d[i];
}

// do whatever you need with the result
printf("%d\n", sum);