回文数、罗马数转整数、整数反转
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                回文数、罗马数转整数、整数反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                文章目錄
- 前言
- 一、整數的回文數判斷
- 1、負數和一位數的判斷
- 2、將整數存進vector容器
- 3、下標mid和next的定位(關鍵)
- 4、循環比較并得出結果
 
- 二、羅馬數字轉整數
- 1、簡介羅馬數字
- 2、利用for嵌套switch case語句實現轉換:
 
- 三、整數反轉
- 1、接值,并檢查是否為負數
- 2、檢查位數(將count乘到與x的一致位數)
- 3、利用count進行位數轉換
- 4、處理兩種特殊情況
 
- 總結
前言
<來自力扣的三道簡單算法題解法分享>
題目一:判斷一個整數是否是回文數;
 題目二:把輸入的羅馬數字轉換成整數;
 題目三:把輸入的整數反轉后輸出。
下面案例僅供參考
一、整數的回文數判斷
輸入一個整數,判斷是否為回文數,是則返回true,否則返回false。 例:輸入【-121】,返回false;輸入【12321】,返回true。1、負數和一位數的判斷
if (x < 0)return false; //小于0的都不是回文數if (x >= 0 && x <= 9)return true; //0~9是回文數2、將整數存進vector容器
vector<int>a;int n = 0;while (x != 0) { //整除法存進容器a (頭插)a.insert(a.begin(), x % 10);x /= 10;n++;}3、下標mid和next的定位(關鍵)
int mid = n / 2 - 1; /*定位mid*/int Next = 0;if (n % 2 == 0)Next = mid + 1; /*定位偶數的next*/elseNext = mid + 2; /*定位奇數的next*/4、循環比較并得出結果
int i = 0, j = 0;for (i = mid, j = Next; i >= 0 && j <= a.size(); i--, j++) {if (a[i] == a[j])continue;else return false;}return true;二、羅馬數字轉整數
1、簡介羅馬數字
羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。 I (1)、V(5)、X(10)、L (50)、C(100)、D (500)、M(1000) 例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。 通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
 X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
 C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
 
2、利用for嵌套switch case語句實現轉換:
for (int i = 0; i < s.size(); i++) {switch (s[i]) {case 'I': {if (s[i + 1] == 'V') { ans += 4; i++; break; }if (s[i + 1] == 'X') { ans += 9; i++; break; }ans += 1;}break;case 'V':ans += 5; break;case 'X': {if (s[i + 1] == 'L') { ans += 40; i++; break; }if (s[i + 1] == 'C') { ans += 90; i++; break; }ans += 10;}break;case 'L':ans += 50; break;case 'C': {if (s[i + 1] == 'D') { ans += 400; i++; break; }if (s[i + 1] == 'M') { ans += 900; i++; break; }ans += 100;}break;case 'D':ans += 500; break;case 'M':ans += 1000; break;}}三、整數反轉
輸入一個int類型范圍的整數,輸出反轉后的整數
 例:
 輸入【-123】輸出【-321】
 輸入【857】 輸出【758】
1、接值,并檢查是否為負數
特殊情況:
 當輸入值為-2147483648時,直接用x=-x會超出int類型的范圍
 (int類型取值范圍:-2147483648 至 2147483647)
2、檢查位數(將count乘到與x的一致位數)
int temp = y;long long count = 1;while (temp != 0) { /*整除法檢查x的位數*/temp /= 10;count *= 10; /*count乘到比x位數多一位*/}count /= 10; /*count減少一位,與x位數一致*/3、利用count進行位數轉換
long long ans = 0;while (y != 0) { //利用count進行位數轉換ans += ((y % 10) * count);y /= 10;count /= 10;}4、處理兩種特殊情況
if (ans < -2147483648 || ans>2147483647)return 0; /*如果超出int的范圍則返回0*/if (tap == 1) ans = -ans;/*如果標記為1則將結果置為負數*/總結
提示:這里對文章進行總結:
 以上就是今天分享的三個內容,會有更優的解法,繼續加油!
總結
以上是生活随笔為你收集整理的回文数、罗马数转整数、整数反转的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 两个长整数的相加
- 下一篇: 如何取消微信异地登录保护(微信异地登录怎
