2012-10-21 77 views
0

我不能使用atoi,需要按位數字做它..我如何將它保存在一個int ..給定一個字符*溫度把它放在一個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

從最左邊的數字開始,將它添加到一個臨時累加器,並且對於每個數字將累加器乘以十,並添加當前數字 –

+0

,這將給出任意數字的整個int。int a = 798654564654564654; – user1762517

回答

2

像這樣:

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

然而,採取帳戶號碼是非常大的,所以對於ilong long int類型是比較合適的。

+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


編輯:這是一個優化的溶膠:

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