给定一个 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