|  | 
 
 发表于 2016-7-11 12:35:02
|
显示全部楼层 
| 本帖最后由 人造人 于 2016-7-11 12:36 编辑 
 123456789999999999
 这个数太大了,需要 unsigned long long 类型才能存放
 标准库中只有这些吗?
 _CRTIMP double __cdecl __MINGW_NOTHROW        atof        (const char*);
 _CRTIMP int __cdecl __MINGW_NOTHROW        atoi        (const char*);
 _CRTIMP long __cdecl __MINGW_NOTHROW         atol        (const char*);
 
 我们看来需要一个可以转换 unsigned long long 类型的函数
 我自己写了一个
 
 复制代码#include <stdio.h>
#include <string.h>
unsigned long long my_atol(char const *str) // 名字可能需要换一个,因为是转换到 unsigned long long 类型
{
        unsigned long long ret = 0;
        int str_len = strlen(str);
        int i = 0;
        
        str_len--;
        
        while(1)
        {
                char current = str[i];
                
                ret = ret * 10 + (current - '0');
                
                if(i == str_len)
                {
                        break;
                }
                
                i++;
        }
        return ret;
}
int main()
{
        printf("%llu\n", my_atol("1234567899999999997"));
        return 0;
}
 | 
 |