[英]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] == 6
和d[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:
如果您將數字存儲在從索引零開始的數組中,從最高有效數字到最低有效數字,那么解決方案將是這樣的:
// 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.