簡體   English   中英

如何將整數數字數組轉換為整數值?

[英]How to convert an array of integer digits into an integer value?

我有一個鍵盤,用於將數字輸入到微控制器 (atmega32 avr) 中。 用戶將能夠輸入 1、2 或 3 位數字,因為我定義的輸入范圍是 [0-999]。 這些數字中的每一個都將存儲在一個整數數組的位置。

所以,如果我的數組被定義為int d[3]並且用戶按順序輸入 2, 6, 9,我將有d[0] == 2 , d[1] == 6d[2] == 9 現在我想從這些數字{2, 6, 9}一個整數: value == 269 我怎樣才能做到這一點?

以下答案應適用於任何語言。 這將相當簡單,我建議您以稍微不同的方式格式化數組中的值。 我認為如果操作員輸入一個個位數的數字來存儲它會更容易: {0, 0, 5} 如果是兩位數,則像這樣存儲: {0, 5, 9} 最后,如果操作員輸入一個三位數的數字,像這樣存儲它: {5, 9, 2}

最后,在格式化數組后,您可以使用以下邏輯來獲取數字。 例如,如果數組是arr = {5, 9, 8}; 那么您可以執行以下操作以將其作為數字獲取:

arr[0] * 100 + arr[1] * 10 + arr[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);
}

你有兩個問題要解決,對吧?

  • 問題#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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM