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

Posted

技术标签:

【中文标题】如何将整数位数组转换为整数值?【英文标题】:How to convert an array of integer digits into an integer value? 【发布时间】:2019-08-03 12:28:48 【问题描述】:

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

所以,如果我的数组定义为int d[3],并且用户依次输入 2、6、9,我将拥有d[0] == 2d[1] == 6d[2] == 9。现在我想从这些数字2, 6, 9:value == 269 中生成一个整数。我该怎么做?

【问题讨论】:

C 不是 C++。请为您正在编写的代码选择适当的标签和edit您的Q。也可以使用markdown对其进行格式化。 谢谢。因为数字可以在 0-999 之间,所以它并不适用于所有人。如果操作员只输入 3 和 8。然后我们有 y=380 而不是 38 通过这种方式。我说的对吗? 【参考方案1】:

以下答案应适用于任何语言。这将相当简单,我建议您对数组中的值进行一些不同的格式化。我认为如果操作员输入一个个位数的数字存储它会更容易:0, 0, 5。如果它是一个两位数的数字,像这样存储它:0, 5, 9。最后,如果操作员输入一个三位数的数字,则存储如下:5, 9, 2

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

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

如果您遵循我上面给出的格式建议,那将有效。

【讨论】:

谢谢亲爱的。您的意思是操作员输入 0 0 5 而不是 5???我知道这很容易解决问题,但这就是为什么老板只有我,我不能说我不能这样做,让我们输入 3 位数字。 你可以这样做,但是为了更好的用户体验,你会希望用户只输入 5,然后在你的代码中将它输入到数组中时用零填充 阿什坎帕夏有意义吗? 我认为我的错误是另一个地方。 Keypad() 扫描我的键盘.....t=keypad(); ......所以当我想 l[i]=t 是错误的时,我想通过我的 int 数字 t 进行 aray。我该怎么办? 对不起,我不熟悉确切的方法等,因此您必须查阅您正在使用的文档。您也可以就此提出另一个问题。如果我回答了有关如何从数组元素中生成整数的原始问题,请批准答案。希望这会有所帮助,很抱歉我无法提供更多帮助!【参考方案2】:

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

示例: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);

【讨论】:

不,pow is absolutely the wrong tool to do this,如果可以的话,我会两次否决这个答案 @AnttiHaapala 使用我自己的版本获得 10 的幂,这应该不是问题。我已经修改了答案。我想不再需要反对票【参考方案3】:

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

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

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

    用哨兵结束输入。 - 你的键盘有类似 Enter Key 的东西吗? 超时完成输入。 - 每次读取后启动计时器。溢出可能表示用户已完成输入。

在这两种情况下,您都可以计算用户在标记/超时之前通知了多少位数。


现在我们只需要解决问题 #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);

【讨论】:

以上是关于如何将整数位数组转换为整数值?的主要内容,如果未能解决你的问题,请参考以下文章

keil c中如何把字符串转化为整型 具体一点

如何用js把字符串转化为整型

如何将时间戳日期转换为整数值

如何在 SQL 中将指数和系数转换为整数值

类型转换

如何在读取 CSV 文件时将字符串值转换为整数值?