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