LeetCode—7. 反转整数

这一题真的很简单啊,不知道为什么花了好久的时间,其实功能早就实现了,题目理解错了,他是说反转后的整数溢出,则返回 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;
}



猜你喜欢

转载自blog.csdn.net/baidu_36536257/article/details/80259105