【发布时间】:2019-07-29 08:52:48
【问题描述】:
我编写了一个 C 程序,它使用两种不同的算法将表示数值的字符串常量转换为其整数值。由于某些原因,第一个算法 atoi() 不能在大值上正确执行,而第二个算法 atoi_imp() 工作正常。这是优化问题还是其他错误?问题是第一个函数使程序的进程因错误而终止。
#include <stdio.h>
#include <string.h>
unsigned long long int atoi(const char[]);
unsigned long long int atoi_imp(const char[]);
int main(void) {
printf("%llu\n", atoi("9417820179"));
printf("%llu\n", atoi_imp("9417820179"));
return 0;
}
unsigned long long int atoi(const char str[]) {
unsigned long long int i, j, power, num = 0;
for (i = strlen(str) - 1; i >= 0; --i) {
power = 1;
for (j = 0; j < strlen(str) - i - 1; ++j) {
power *= 10;
}
num += (str[i] - '0') * power;
}
return num;
}
unsigned long long int atoi_imp(const char str[]) {
unsigned long long int i, num = 0;
for (i = 0; str[i] >= '0' && str[i] <= '9'; ++i) {
num = num * 10 + (str[i] - '0');
}
return num;
}
【问题讨论】:
-
没有正确执行是什么意思?作为问题描述,这是一个毫无意义的短语。您遇到了什么具体问题?
-
@KenWhite 问题是第一个函数使程序的进程以错误终止。
-
别告诉我。 :-) 相反,edit 您的问题并将其放在人们可以看到的地方。埋在评论混乱中是没有好处的。
标签: c algorithm debugging optimization