我有一个字符串,其中包含12个字符,并希望在int中转换它,或者我们可以说数字,但不能这样做。我写了一个代码,将字符串转换为11位数,但之后它开始给出垃圾值。 我的代码就像
function FirstFactorial(num) {
if(num==1)
return num;
else {
a = FirstFactorial(num-1);
a = a * num;
return a;
}
}
答案 0 :(得分:3)
错误:
x
?宣布在哪里?为什么要注释掉将res
复制到x中的代码?为什么要在循环内而不是在函数末尾复制它?如果你坚持使用double,你甚至不需要x
return (double)res;
,原因不明。long
只能容纳2 ^ 32/2 = 21.4亿作为最大数字。考虑使用long long
。%d
转换说明符进行长双打印,这在两种情况下都是错误的。其他事项:
int main (void)
。 Reference。const char*
。因为你永远不会写字符串文字,只能从中读取。const char*
。答案 1 :(得分:1)
问题是long
不能保持与“12345678912”一样大的数字而是使用
unsigned long long
。
其说明符为"%llu"
。
并且在您的代码中x
并未延迟,而是使用return res;
当您使用unsigned long long
时,您需要将函数double myatoi()
的定义更改为unsigned long long myatoi()
-
您的程序可以重写如下 -
#include<stdio.h>
unsigned long long myAtoi(char *str);
int main()
{
unsigned long long n; // Note here n also changed from double to unsigned long long
double m;
char* a="12345678912";
char* b="34";
n=myAtoi(a);
//m=atoi(b);
printf("\nconversion is : %llu",(n));
}
unsigned long long myAtoi(char *str)
{
printf("\nstr : %s",str);
unsigned long long res = 0; // Initialize result
long i ;
// Iterate through all characters of input string and update result
for (i = 0; str[i] != '\0'; i++)
{
res = res*10 + str[i] - '0';
printf("\n res : %llu",res);
//x=res;
}
return res;
}
答案 2 :(得分:0)
我认为问题是你无法持有&#34; 12345678912&#34;一个长变量。 请参考 http://www.tutorialspoint.com/cprogramming/c_data_types.htm
长变量可以容纳的最大值是-2,147,483,648到2,147,483,647
并且你从method.return res返回了错误的值,而不是x.no需要x代码。