2011-09-08 1 views
-1

기본적으로 10 진수를 다른 기준 (예 : 기본 2)의 숫자로 변환하는 방법이 있습니다. 배열의 0 번째 위치에있는 요소가 가장 중요합니다 (예 : $ 100). 1은 가장 중요하다.문자열을 반대로

AC를 출력해야하는 문자열을 넣으면 CA (Dec to 16 진수)를 얻습니다. C에서이 char 배열을 어떻게 반전합니까?

char* decimalToRadixN(int decimalNumber, int radixN, char result[]){ 
    /* 
     If its below base 10, its going to be a digit convertsion (ex to binary) 
     If it's above base 10, we need to call a method to convert the char to a symbol. 
    */ 

     //char swap[] = result[]; 

    int count = 0; 
    while(decimalNumber>0) 
    { 
     int remain = decimalNumber % radixN; 
     result[count] = decimalToSymbol(remain); 
     decimalNumber = decimalNumber/radixN; 
     count++; 
    } 

    /* 
    for(int i = 0; i < count; i++) 
    { 
      reverse the array 
    } 
    */ 
    return result; 
} 
+0

중간에 올 때까지 요소를 교체하십시오. BTW 어떻게 결과가 끝나는 지 어떻게 알 수 있습니까? –

답변

2
int i, j; 
for(i = 0, j = count - 1; i < j; i++, j--) 
{ 
    char temp = result[ i ]; 
    result[ i ] = result[ j ]; 
    result[ j ] = temp; 
} 
result[ count ] = '\0'; 
+0

도움을 주셔서 감사합니다, 크리스, 내가 필요한 것입니다. :-) –

0

요청으로 질문에 확실히 대답은, 그러나 왜 그냥 처음부터 올바른 순서에 숫자를 쓸하지?

당신이 몇 자릿수를 필요로했는지 알지 못했기 때문에, 어디서부터 쓰기 시작해야하는지는 의심의 여지가 없습니다.

숫자의 로그를 기수의 밑으로 가져 와서 수행 할 수 있습니다. 이것은 logarithms의 규칙을 사용하여 수행 할 수 있습니다.

int numDigitsForRadix(double decimalNumber, double radixN) 
{ 
    double numDigits = log(decimalNumber)/ log(radixN); 
    int intDigits = (int)numDigits + 1; 
    return intDigits; 
} 

[ 'decimalNumber'는 절대로 10 진수가 아닙니다. 그것은 C이 int, 정말 이진입니다. 이것은 단지 이름을 짓는 것 뿐이며 차이는 없습니다. printf()에서 10 진수로 표시되는 것은 숫자 자체가 아니고 의 해석입니다.]

이제 주어진 숫자에 숫자가 생기고 그 숫자에 쓰고 값이 증가하지 않고 감소합니다.

또한 사용 가능한 길이의 결과를 전달하면 사용 가능한 길이보다 먼저 확인하고 오류 코드 (예 : NULL)를 반환 할 수 있습니다.

null을 끝내거나 그렇지 않으면 작성된 문자열의 길이를 반환하는 지원을 제공하는 것을 잊지 마십시오.