golang學習筆記——羅馬數字轉換器

文章目錄

  • 羅馬數字轉換器
    • 代碼
  • 參考
    • LeetCode 羅馬數字轉整數
      • 代碼

羅馬數字轉換器

在這里插入圖片描述

編寫一個程序來轉換羅馬數字(例如將 MCLX 轉換成 1,160)。 使用映射加載要用于將字符串字符轉換為數字的基本羅馬數字。 例如,M 將是映射中的鍵,其值將為 1000。 使用以下字符串字符映射表列表:

  • M => 1000
  • D => 500
  • C => 100
  • L => 50
  • X => 10
  • V => 5
  • I => 1

如果用戶輸入的字母與上述列表中的不同,則打印一個錯誤。

請記住在有些情況下,較小的數字會排在較大的數字前面,因此不能僅僅將數字相加。 例如,數字 MCM 應打印為 1,900

代碼

列出從1到10的羅馬數字,不難發現規律。當前位置的元素比下個位置的元素小,就減去當前值,否則加上當前值。

所以,我們可以將單個字母查表轉為對應數字,用Slice保存。根據規律,減去當前值(代碼里是將當前位置數字設為負值,再相加,也是一樣的道理)。其中,長度加1是必須的,為了保證加上最后那個數字。

package mainimport ("fmt"
)func romanToArabic(numeral string) int {romanMap := map[rune]int{'M': 1000,'D': 500,'C': 100,'L': 50,'X': 10,'V': 5,'I': 1,}arabicVals := make([]int, len(numeral)+1)for index, digit := range numeral {if val, present := romanMap[digit]; present {arabicVals[index] = val} else {fmt.Printf("Error: The roman numeral %s has a bad digit: %c\n", numeral, digit)return 0}}total := 0for index := 0; index < len(numeral); index++ {if arabicVals[index] < arabicVals[index+1] {arabicVals[index] = -arabicVals[index]}total += arabicVals[index]}fmt.Println("---arabicVals---")fmt.Println(arabicVals)return total
}func main() {fmt.Println("MCLX is", romanToArabic("MCLX"))fmt.Println("MCMXCIX is ", romanToArabic("MCMXCIX"))fmt.Println("MCMZ is", romanToArabic("MCMZ"))
}

輸出

---arabicVals---
[1000 100 50 10 0]
MCLX is 1160---arabicVals---
[1000 -100 1000 -10 100 -1 10 0]
MCMXCIX is  1999Error: The roman numeral MCMZ has a bad digit: Z
MCMZ is 0

參考

LeetCode 羅馬數字轉整數

羅馬數字包含以下七種字符: IVXLCDM

字符          數值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1 。12 寫做 XII ,即為 X + II27 寫做 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。

給定一個羅馬數字,將其轉換成整數。

示例 1:

輸入: s = "III"
輸出: 3

示例 2:

輸入: s = "IV"
輸出: 4

示例 3:

輸入: s = "IX"
輸出: 9

示例 4:

輸入: s = "LVIII"
輸出: 58
解釋: L = 50, V= 5, III = 3.

示例 5:

輸入: s = "MCMXCIV"
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= s.length <= 15
  • s 僅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')
  • 題目數據保證 s 是一個有效的羅馬數字,且表示整數在范圍 [1, 3999]
  • 題目所給測試用例皆符合羅馬數字書寫規則,不會出現跨位等情況。
  • IL 和 IM 這樣的例子并不符合題目要求,49 應該寫作 XLIX,999 應該寫作 CMXCIX 。
  • 關于羅馬數字的詳盡書寫規則,可以參考 羅馬數字 - Mathematics 。

代碼

當前位置的元素比下個位置的元素小,就減去當前值,否則加上當前值

var symbolValues = map[byte]int{'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}func romanToInt(s string) (ans int) {n := len(s)for i := range s {value := symbolValues[s[i]]if i < n-1 && value < symbolValues[s[i+1]] {ans -= value} else {ans += value}}return
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161200.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt+sqlite3使用事務提升插入效率

參考&#xff1a; 【精選】SQLite批量插入效率_sqlite 批量插入_PengX_Seek的博客-CSDN博客 (1)不使用事務時&#xff1a; clock_t t_start clock();QSqlQuery query(db);QString sql("insert into test(col1,col2) values(1,2);");for (int i 0; i < 1000; i…

c++學習之哈希

目錄 1.關于unordered系列關聯式容器 2.關于unordered_map 3.哈希&#xff08;散列&#xff09;表的實現 一&#xff0c;直接定址法 二&#xff0c;除留余數法 方法一&#xff1a;閉散列&#xff1a;開放定址法 方法二&#xff1a;閉散列&#xff1a;哈希桶/拉鏈法 4.哈希…

機器學習/sklearn 筆記:K-means,kmeans++

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…

hadoop shell操作 hdfs處理文件命令 hdfs上傳命令 hadoop fs -put命令hadoop fs相關命令 hadoop(十三)

hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 創建文件夾&#xff1a; # hdfs前綴也是可以的。更推薦hadoop hadoop fs -mkdir /sanguo 2.上傳至hdfs命令&#xff1a; 作用&#xff1a; 從本地上傳hdfs系統 &#xff08;本地文件被剪切走&#xff0c;不存在了&…

論防火墻的體系結構

防火墻的體系結構 防火墻的體系結構 雙重宿主主機體系結構。屏蔽主機體系結構。屏蔽子網體系結構。 雙重宿主主機體系結構 雙重宿主主機體系結構是指以一臺具有雙重宿主的主機計算機作為防火墻系統的主體&#xff0c;執行分離外部網絡與內部網絡的任務。該計算機至少有兩個…

【NGINX--4】大規模可擴展的內容緩存

1、緩存區 緩存內容并定義緩存的存儲位置。 使用 proxy_cache_path 指令定義共享內存緩存區和內容的位置&#xff1a; proxy_cache_path /var/nginx/cachekeys_zoneCACHE:60m levels1:2inactive3h max_size20g; proxy_cache CACHE;上述緩存定義示例在文件系統 /var/nginx/ca…

為什么要用多線程?

提高響應速度&#xff1a;對于耗時操作&#xff0c;使用多線程可以使得應用程序更快地響應用戶的請求&#xff0c;從而提高用戶體驗。實現并行計算&#xff1a;多線程可以同時執行多個任務&#xff0c;從而實現并行計算&#xff0c;提高程序的運行效率。提高CPU利用率&#xff…

html屬性值可以不用引號嗎,實例驗證

html屬性值可以不用引號 HTML元素的屬性值可以不適用引號來包裹&#xff0c;瀏覽器一樣可以將其進行渲染。不過&#xff0c;如果這樣寫HTML的代碼的話&#xff0c;屬性與屬性值之間需要用空格來進行隔開&#xff0c;避免后面的屬性變成前面屬性的屬性值。 提示&#xff1a;雖…

達夢列式存儲和clickhouse基準測試

要驗證達夢BigTable和ClickHouse的性能差異&#xff0c;您需要進行一系列基準測試。基準測試通常包括多個步驟&#xff0c;如準備測試環境、設計測試案例、執行測試、收集數據和分析結果。以下是您可以遵循的一般步驟&#xff1a; 準備測試環境&#xff1a; 確保兩個數據庫系統…

sql手工注入漏洞測試(MYSQL)-墨者-url信息

背景&#xff1a; 自己在墨者官網靶場練習的時候&#xff0c;一直出錯&#xff0c;手工容易出錯&#xff0c;所以列舉一些信息供大家核對&#xff0c;可以參考改動。 數據庫版本version() 5.7.22-0ubuntu0.16.04.1 當前數據庫名稱database&#xff08;) m…

模擬量采集----測量輸入的電流

生活中的模擬量有很多 大多都為電壓信號和電流信號 今天講如何測量輸入的電流信號 通過歐姆定律可知 電流測量的測量&#xff1a;是將電流加載在固定阻值的電阻上&#xff0c;來測量這個電阻二端的電壓 最后反算出電流的大小 所用的公式是IU/R 我們使用仿真軟件來看測量…

神經網絡中間層特征圖可視化(輸入為音頻)(二)

相比方法一個人感覺這種方法更好 import librosa import numpy as np import utils import torch import matplotlib.pyplot as pltclass Hook:def __init__(self):self.features Nonedef hook_fn(self, module, input, output):self.features output# 創建鉤子的實例 hook …

EasyExcel listener無法通過Autowired注入xxMapper

easyexcel listener無法通過Autowired注入xxMapper 文章目錄 easyexcel listener無法通過Autowired注入xxMapperbug記錄&#xff1a;解決方案&#xff1a;easyexcel 使用例子controllerServiceImpllistener bug記錄&#xff1a; productMapper注入一直為null,而procureDetailM…

Visual Studio(VS) C++程序LNK2005錯誤,提示“error LNK2005: _XXX已經在xxx.obj中定義”解決方案

1.問題如圖 2.出現原因 項目中有多個源文件或頭文件&#xff0c;include后導致有些變量重復定義&#xff0c;加上Visual Studio新版版要求更嚴格 3.解決辦法 查詢到的解決辦法很多不好用&#xff0c;此處記錄解決自己問題的一個辦法&#xff1a;直接讓編譯器忽略第二次定義的…

圖形數據庫的實戰應用:如何在 Neo4j 中有效管理復雜關系

關系數據庫管理系統( RDBMS ) 代表了最先進的技術&#xff0c;這在一定程度上要歸功于其由周邊技術、工具和廣泛的專業技能組成的完善的生態系統。 在這個涵蓋信息技術(IT) 和運營技術(OT) 的技術革命時代&#xff0c;人們普遍認識到性能方面出現了重大挑戰&#xff0c;特別是…

連續變量降維:主成分分析和因子分析

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;和因子分析&#xff08;Factor Analysis&#xff09;都是用于處理連續變量降維的統計方法&#xff0c;它們在數據分析和特征提取中經常被使用。盡管它們有一些相似之處&#xff0c;但它們的目標…

初識JVM(簡單易懂),解開JVM神秘的面紗

目錄 一、什么是JVM&#xff08;Java虛擬機&#xff09;&#xff1f; 二、JVM的功能 三、JVM的功能-即時編譯 四、常見的JVM 五、JVM的組成 五、JVM的工作流程 參考資料 一、什么是JVM&#xff08;Java虛擬機&#xff09;&#xff1f; 在Java的世界里&#xff0c;Java虛…

代碼文檔瀏覽器 Dash mac中文版軟件特色

Dash mac是一個基于 Python 的 web 應用程序框架&#xff0c;它可以幫助開發者快速構建數據可視化應用。Dash 的工作原理是將 Python 代碼轉換成 HTML、CSS 和 JavaScript&#xff0c;從而在瀏覽器中呈現交互式的數據可視化界面。Dash 提供了一系列組件&#xff0c;包括圖表、表…

如何將設置為靜態IP的VMware虛擬機進行克隆以便可以復刻相應的環境

一定要關閉需要克隆的虛擬機右鍵要選擇克隆的虛擬機&#xff0c;選擇管理->克隆&#xff0c;進入克隆虛擬機向導 設定克隆出來的虛擬機名稱以及位置&#xff0c;選擇完成 克隆完成之后將會生成虛擬機&#xff0c;示例中生成的虛擬機為ubuntu-dev2 因為原本的虛擬機為靜態ip的…

區域人員超限AI算法的介紹及TSINGSEE視頻智能分析技術的行業應用

視頻AI智能分析已經滲透到人類生活及社會發展的各個方面。從生活中的人臉識別、停車場的車牌識別、工廠園區的翻越圍欄識別、入侵識別、工地的安全帽識別、車間流水線產品的品質缺陷AI檢測等&#xff0c;AI智能分析技術無處不在。在某些場景中&#xff0c;重點區域的人數統計與…