首页 > 学院 > 开发设计 > 正文

第一周作业1

2019-11-06 07:53:03
字体:
来源:转载
供稿:网友

1. 题目要求

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Note: The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

2. 解决思路

通过对数字模十取余得到它的最低位。其实本题考查的是整数的溢出处理,在代码实现中使用long来保存可能溢出的结果,再与最大/最小整数相比较。时间复杂度为O(n)。

3. 完整代码

#include <stdio.h>#define INT_MAX 2147483647 //最大的32位有符号整数(2^31-1)#define INT_MIN -2147483647 //最小的32位有符号整数int main(){ long long result = 0; //因为将数取反结果有可能溢出,所以用64位来存储结果。 int a[100] = { 0 }; //定义一个数组来存储每一位 int n = 0; PRintf("请输入一个整数:/n"); scanf("%d",&n); int i = 0; do { a[i] = n % 10; //将整数n的每一位拆开 n = n / 10; ++i; } while ( n != 0); for(int j=0; j<i; ++j) //将n的每一位拼凑出结果 { long long temp = a[j]; for (int t = 0; t <(i-j-1); ++t ) //按所在位乘以10的倍数 { temp *= 10; } result += temp; } if (result > INT_MAX || result < INT_MIN) //判断结果是否溢出 { result = 0; } printf("反转结果:%d/n", result); scanf("%d",&n); //加个输入让窗口停下来 return result;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表