这一题真的很简单啊,不知道为什么花了好久的时间,其实功能早就实现了,题目理解错了,他是说反转后的整数溢出,则返回 0 我错误理解为输入的数据错误本来溢出就要输出0,这根本做不到嘛,因为函数中接受数据的是int类型,999999999999int他能接受,但直接是溢出后的错误结果,通过int根本无法判断输入数据是否溢出。此间,学习到了:
1.存储 32 位有符号整数,其数值范围是 [−2 31, 2 31 − 1],2 31=2 147 483 648 (10位)。
2.字符数组初始化:
char charr[] = { 'z','i','f','u','c','h','u','a','n','s','h','u','z','u' ,'\0'};一定要加不然puts和printf(s)会有不明字符出现
char parr[] = "zifuchuanshuzu";
3.C语言有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、long、float类型的数字。需要注意的是,这个几个函数是C语言提供的扩展功能,并不是标准的函数,必须引入头文件# include <stdlib. h># include <stdlib. h>;
sprintf()函数是标准函数,不用插入头文件,用法如下:
1.int num=atoi(“12345”);//字符串”12345”转换为数字12345,并存入num变量中
2.itoa(a,b,c)前一篇有介绍
1.char str[10];
int a=1234321;
sprintf(str,"%d",a);
2.char str[10];
double a=123.321;
sprintf(str,"%.3lf",a);
1.char str[10];
int a=1234321;
int a=1234321;sprintf(str,"%d",a);
2.char str[10];
double a=123.321;
sprintf(str,"%.3lf",a);
4.字符串截取strncpy(目的串, 源串+n(n为从第几个开始), k(截取个数));
5.22-32行是结果溢出判断,刚开始考虑不全,最后两个用例没过
int reverse(int x) { int a[100]; double x1=0; int i=0,j=0; while(x) { a[i]=x%10; x=x/10; i++; } i--; while(i>=0) { x1=x1+a[i]*pow(10.0,(double)(j)); j++; i--; } int x11=(int)(x1); char s[100]; sprintf(s,"%d",x11); int len=strlen(s); char ss[100]; if(s[0]=='-') { strncpy(ss, s+1, len-1); if((len>11)||(len==11&&strcmp(ss,"2147483647")>0)) return 0; } if(s[0]!='-') { if((len>10)||(len==10&&strcmp(s,"2147483647")>0))return 0; } return x11; } int main() { int x1,x2; x2=reverse(-2147483412); printf("%d\n",x2); return 0; }