2012-10-21 6 views
0

atoi를 사용할 수 없습니다. 숫자로 자릿수를 입력해야합니다 .. 어떻게 char * temp를 주어 int에 저장합니까?문자 배열을 하나의 int로 변환합니다.

이처럼
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <math.h> 
int main() { 

    char* temp = "798654564654564654"; 
    int i = 0; 

    for (i = 0; i < strlen(temp); i++) { 

     printf("%d", temp[i] - 48); 

    } 

    printf("\n"); 

} 
+0

당신은 atoi를 사용할 수 없다고 말하면, 이것이 숙제라고 가정하고 있습니까? – Borgleader

+3

은 가장 왼쪽 자릿수에서 시작하여 임시 어큐뮬레이터에 추가하고 각 자릿수에 대해 누산기에 10을 곱하고 현재 숫자 –

+0

을 추가합니다.이 숫자는 하나의 전체 정수를 나타냅니다. int a = 798654564654564654; – user1762517

답변

2

: ilong long int 유형이 더 적합하므로

int i = 0, j = 0; 
while (temp[j]) 
    i = i*10 + temp[j++] - '0'; 

그러나, 당신의 숫자가 매우 큰 것을 설명하기 위해 걸릴.

+0

당신의 도움에 감사하지만 그것은 나를 위해하지 않습니다. – user1762517

+0

798654564654564654는 int보다 클 수 있으므로 위의 결과가 이상한 경우 123456과 같이 작은 숫자로 시도하십시오. – hexist

+0

나는이 char * temp = "1010"으로 시도했다. 나에게 -1661074446 – user1762517

1
#include<string.h> 

int main() {  
    char* s = "798654564654564654"; 
    unsigned long long num = 0;  
    int i = 0, j = strlen(s);  
    for(i=0; i< j && s[i]>='0' && s[i]<='9'; i++)  
     num = num * 10 + s[i] - '0';  
    printf("%lld",num);  
    return 0;  
} 

작동해야합니다. 여기는 demo입니다.


EDIT는 :

unsigned long long latoi(char * s) { 
    unsigned long long num = 0; 
    while(*s>='0' && *s<='9') num = num * 10 + *(s++) - '0'; 
    return num; 
} 

그리고 demo : 여기 최적화 솔이다.

+0

64K의 입력을 위해 작동합니다. – user1762517

+0

네, 대답을 편집했습니다. – loxxy

관련 문제