2016-10-26 8 views
-2

코딩 문제가 있습니다.배열을 숫자로 변환 (Mikro) C

내 프로그램에 직렬 입력을 읽고 배열에 숫자를 저장합니다.

는 이제 배열 인덱스 0은 하나의 숫자를 나타냅니다 계산을 할 수있는 정수, 등

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 

배열은 동적이기 때문에에만있을 수 인덱스 1 열 개 자리에이 배열을 변환 할 2 개의 색인.

답변

-1

숫자는 십 자리의 값을 나타냅니다.

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로 초기화되고 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; 

} 

. 이 작업을 수행하는 데 더 좋은 방법이있을 것이라고 확신하지만 문제를 해결하는 솔루션입니다. 이게 도움이 되길 바란다!