int reverse(int x) {
int a[23];
// sprintf(str, "%d", x);//将v转为字符串。
int b = 0;
int len = x< 0 ? -x : x;
while (len>0)
{
len = len / 10; //1/2=0,参与运算的量均为整型时,结果为整型,舍去小数,5/2.0=2.5
b = b + 1;
}
long long int sum=0;
if (x>0)
{
for (int i = b; i>0; i--)
{
a[i - 1] = x % 10;
x /= 10;
sum = sum+a[i-1]*pow(10,i-1);
}
}
else {
x = -x;
for (int i = b; i>0; i--)
{
a[i - 1] = x % 10;
x /= 10;
sum = sum+a[i-1]*pow(10,i-1);
}
sum= -sum;
}
if(sum >INT_MAX -1 || sum< -INT_MAX )
{
return 0;
}else{
return sum;
}
}
思路:分正负数
如果是负数:取反,分别取出每位数放进数组进行反转,考虑到函数输出的必须是数,所以将数组转化为数:用对应的数乘以10的对应数次方然后相加(注意sum的取值会超范围),然后取反,
如果是正数:分别取出每位数放进数组进行反转,考虑到函数输出的必须是数,所以将数组转化为数:用对应的数乘以10的对应数次方然后相加(注意sum的取值会超范围)
知识点,
1、利用
while (len>0)
{
len = len / 10; //1/2=0,参与运算的量均为整型时,结果为整型,舍去小数,5/2.0=2.5
b = b + 1;
}
去求数x的个数,这个对整数很管用,(1/2=0,参与运算的量均为整型时,结果为整型,舍去小数,5/2.0=2.5)
2、在c中怎么从数组中传出数组
int *reserve(int w)
{
stastic int a[23];
return a;
}
C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:
int * myFunction() { . . . }
另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
这个题目必须是传数,所以没有用这个方法。
3、注意越界的问题
if(sum > INT_MAX -1 || sum <-INT_MAX){
return 0;
}else{
return sum;
}
计算机中32位int类型变量的范围,其中int类型是带符号整数。正数在计算机中表示为原码,最高位为符号位:
1的原码为0000 0000 0000 0000 0000 0000 0000 0001
2147483647的原码为0111 1111 1111 1111 1111 1111 1111 1111
所以最大的正整数是2147483647,负数在计算机中表示为补码,最高位为符号位:-1:
原码为1000 0000 0000 0000 0000 0000 0000 0001,
反码为1111 1111 1111 1111 1111 1111 1111 1110,
补码为1111 1111 1111 1111 1111 1111 1111 1111
-2147483647:
原码为1111 1111 1111 1111 1111 1111 1111 1111,
反码为1000 0000 0000 0000 0000 0000 0000 0000,
补码为1000 0000 0000 0000 0000 0000 0000 0001
所以最小的负数是-2147483647吗?错,不是。
在二进制中,0有两种表方法。
+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,
-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,
因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。
-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。
注意,这个补码并不是真正的补码,真正的补码是1 1000 0000 0000 0000 0000 0000 0000 0000,溢出。
所以带符号32位int类型整数为-2147483648~2147483647
在编程中怎样使用最大和最小的数呢?C语言在limits.h中包含了极大和极小的整数值,直接调用就可以了。
-
#include <limits.h>
-
#include<stdio.h>
-
int max = INT_MAX;//最大数
-
int min = INT_MIN;//最小数
-
int main(){
-
printf("max = %d\nmin = %d\n", max, min);
-
return 0;
-
}
彩蛋: