2012-10-21 73 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