给定一个 32 位有符号整数,将整数中的数字进行反转。
?
示例:
例如:給定數“456”,需返回“654”,給定“-876”,則需返回“-678”
注意:
假設我們的環境只能存儲 32 位有符號整數,其數值范圍是 [?231,? 231?? 1]。根據這個假設,如果反轉后的整數溢出,則返回 0。
解答(這篇文章思路分析還行,代碼寫的需要提高):
? 看到題意,我們知道:
(1)注意 X 的 正負 ,(若為 負數 ,為了防止做除法時(向下取整),取其絕對值 ,)用一個數 記錄 X的狀態
(2)首先需要將給定的數 X 的個位、十位?分隔開,
(3)再將分隔開的 位數 翻轉
(4)將翻轉好的 位數 ,進行組合,組合成為一個新的 數
(5)此時,用(1)中 記錄數 判斷 X的狀態
(6)檢查 翻轉 后的值 是否 溢出 (5)和(6)可互換
代碼如下:
“標頭.h”
#pragma once
 #include<stdio.h>
 #include<Windows.h>
 #include<math.h>
 int reverse(int x) {
 ?? ?//如果 -10 < x < 10 表明 x為個位數,無需翻轉
 ?? ?if (x<10 && x >-10)
 ?? ??? ?return x;
 ?? ?//翻轉后的每一位存儲位置
 ?? ?int kk[32] = { 0 };
 ?? ?int i = 0;
 ? ?//y 為檢驗x 是正 是負
 ?? ?int y = 1;
 ?? ?//如果x為負,則使用其y 記錄,用x的絕對值做運算
 ?? ?if (x<0)
 ?? ?{
 ?? ??? ?y = x;
 ?? ??? ?x = -1 * x;
 ?? ?}
 ?? ?// 計算出翻轉后的位置,
 ?? ?for (i = 0; x>9; i++)
 ?? ?{
 ?? ??? ?kk[i] = x % 10;
 ?? ??? ?x = x / 10;
 ?? ?}
 ?? ?// 最后一位 記錄 x 的 最高位
 ?? ?kk[i] = x;
 ?? ?int c = 0;
 ?? ?c = i;
 ?? ?int dd = 0;
 ?? ?int j = 0;
 ?? ?// 計算翻轉后的數的大小( 前面單純計算翻轉后的每一位所在位置)
 ?? ?for (j = 0; j <= c; j++)
 ?? ?{
 ?? ??? ?dd = dd + kk[i--] * pow(10, j);
 ?? ?}
 ?? ?// y 為檢驗數,若y <0 則表明 x 是復數,翻轉后依舊
 ?? ?if (y<0)
 ?? ??? ?dd = -1 * dd;
 ?? ?// 若 翻轉后 32位數 ?溢出,則將翻轉后的數,置為0
 ?? ?if (dd>pow(2, 31) || dd <= -1 * pow(2, 31))
 ?? ??? ?dd = 0;
?? ?return dd;
 }
void test()
 {
 ?? ?int h[3] = { -9, 1534236469, 789 };
 ?? ?int i = 0;
 ?? ?for (i = 0; i < 3; i++)
 ?? ?{
 ?? ??? ?int m = reverse(h[i]);
 ?? ??? ?printf("\t原:%d \n\t現: %d \n ----------\n", h[i], m);
 ?? ?}
 }
源文件:"main.c"
#include"標頭.h"
int main()
 {
 ?? ?test();
 ?? ?system("pause");
 ?? ?return 0;
 }
? ?程序結果如圖:
總結
以上是生活随笔為你收集整理的给定一个 32 位有符号整数,将整数中的数字进行反转。的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: mysql 廖雪峰_关系模型 - 索引
- 下一篇: python应用程序无法正常启动0xc0
