2016-10-26 3 views
-2

私はいくつかの問題を抱えています。配列を数値に変換する(Mikro)C

私は自分のプログラムにシリアル入力を読み込み、その数値を配列に保存します。

今、私は配列のインデックス0が1桁の数字を表して計算を行うには整数、にこの配列を変換したい、インデックス1 10桁など

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つのインデックス。

答えて

-1

数字は10桁の値を表します。

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; 
} 
+0

pow? pow(10,2)は100ではなく99.9999を返す可能性があるので、整数を必要とするときは決してこの関数を使用しないでください。Justeは変数 "pow"を1に初期化し、for *をpow * = 10にします。 –

+0

真、それはdouble型になり、 'int'ではなくなります。 – matt

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は暗黙の整数キャストと不正確につながる、整数を返しません。 E.G 100は代わりに99.9999であり、99に切り捨てられます。

+0

これはちょっと面白いです。多分、 'math.h'の' pow'関数のことを言及する必要があります。また、100を正確に表すことができない浮動小数点表現を持つシステムの種類は何ですか?私はcが常にそれを定義するとは限りませんので、あなたの精度は7ビット未満である可能性がありますが、あなたの例はまだまだ遥かにフェッチされている可能性があります。 – matt

+0

@matt浮動小数点精度とそれが正確に表現できないものは、C標準で定義されていません。実装は大きく変わります。したがって、彼らは常に正確であると仮定することは絶対に安全ではありません。 – Magisch

+3

cによって使用されるべき浮動小数点標準で定義されています。そこでは、与えられた点の整数は常に完全に正確であるという保証があります。 –

1

ループを使用します。番号の長さ、または配列の長さを知っている必要があります。配列内の未使用位置は0である必要があります。

int i; 
long result = 0; // Choose a suitable integer type. 
for (i = length; i <= 0; --i) { 
    result = result * 10 + Array[i]; 
} 
+0

実際には私が下に出て来たものに比べてかなりエレガントな解決策です。 +1その:) – Magisch

0

は、私はあなたがやろうとしているものではない100%確信しているが、これは、あなたが何をしたいです:私はちょうど数ヶ月前にCを習い始め

#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; 

} 

。これを行うより良い方法があると確信していますが、これはあなたの問題を解決するような解決策です。私はこれが助けて欲しい!

関連する問題