主頁 > 後端開發 > 菜鳥記錄:c語言實作PAT甲級1005--Spell It Right

菜鳥記錄:c語言實作PAT甲級1005--Spell It Right

2023-04-28 13:05:42 後端開發

 非常簡單的一題了,但還是交了兩三次,原因:對陣列的理解不足;對數字和字符之間的轉換不夠敏感,這將在下文中細說,

Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.

Input Specification:

Each input file contains one test case. Each case occupies one line which contains an N (10100).

Output Specification:

For each test case, output in one line the digits of the sum in English words. There must be one space between two consecutive words, but no extra space at the end of a line.

Sample Input:

12345
 

Sample Output:

one five

題目分析

  輸入一串數字,然后用英文表達所有數字相加和的每一位數字,

    輸入:10100以內的數字

    輸出:和的每位數字英文表達(eg:sum=256,output=two five six)

首先很明顯代碼是不會翻譯你的結果的,所有用一個陣列來存盤表示每位數字的英文,其次,10100的數字不需要精準表示,因為這里也就100個數字,不是10100個數字,開始我在這卡了半天,想著數字太大要精準存盤,特地翻了之前寫的c語言-大數階乘 - 1001010 - 博客園 (cnblogs.com)一文,后面發現不大行的通,審視一遍后發現了問題,最后輸出,要怎么拆開數字和也是個問題,

個人想法

  首先,還是從變數入手

1 #define  MAX  100
2 int N,m;//輸入N,用于統計N的位數m
3 char lan[10][10] = { "zero","one","two","three","four","five","six","seven","eight","nine" };
4 int sum,a[MAX];//計算和sum,陣列a用來記錄拆開的sum
5 char n[MAX];

  這里開始是想N用來輸入資料,后面發現回圈程序中因為不知道它的位數,所以往往遍歷要很多【補:而且N作為int變數放不了100位,double型的時候可以,但sum作為int不能讓N強轉,都作為double時就會很麻煩】,所以在錯了一次后采取了  char n[MAX];  的寫法,這樣有很多的妙處:

  1. 可以利用字串來進行自動分割,即在輸入時不賦值在地址上(n的每位地址),scanf("%s", &n[i]); ?  scanf("%s", &n);?  scanf("%s", n);?  c語言因為只接受字符,不支持string,寫成這樣就會自動把一串數字字串分成單獨的數字字符并賦值在每個空間單位上,
  2. 回圈遍歷時,不需要知道有幾位,因為每個字符是被附在每個單位空間上的,所以這個陣列遍歷到空,即'\0'就可以停止,
  3. 由于得到的是字符的地址(數字自生的ACII值),所以在計算sum時,不用強轉,而是減去0的ACII值,這個差不僅是地址差也非常融洽的是數字之間的差,

  到這里其實已經沒有什么疑惑的點了,下面直接上完整代碼,

 1 #include<stdio.h>
 2 
 3 #define  MAX  150
 4 int N,m;
 5 char n[MAX];
 6 char lan[10][10] = { "zero","one","two","three","four","five","six","seven","eight","nine" };
 7 int sum,a[MAX];
 8 int main() {
 9     scanf("%s", n);
10     for (int i = 0; n[i] != '\0'; i++) {
11         sum += n[i] - '0';
12     }
13     if (sum == 0){printf("zero");return 0;}//如果和等于0 ,那么直接輸出“zero”就行,注意,這里必須return終止,因為陣列a[-1]也是0
14     for (int i = 0; sum; i++) {
15         a[i] = sum % 10;
16         sum /= 10;
17         m += 1;//m記錄sum的位數,但注意陣列在使用時要減1,因為超范圍了
18     }//sum最后等于0時即完成所有位數的記錄,終止回圈(非常巧妙) 
19     
20         printf("%s", lan[a[m - 1]]);
21         for(int i=m-2;i>=0;i--)
22             printf(" %s", lan[a[i]]);//老一套輸出格式,每一位的數字對于英語組記錄的每一位上的英文
23     
24     return 0;
25 }

 

總結

  • 陣列的利用,例如本文對英語的存盤采用了二維陣列,由于是char型,每單位只存放一個字符,所以lan[10][10]有10行10列,每列存放一個字符,一行存放10個字符,如果列數不足或是剛好,就會因為沒有讀到 '\0' 而出現連續輸出,如下,每列只有5個單位,故原本“seven”就該停止卻因為沒有 '\0' 而讀取到下一行“eight”一直到“nine”才停下,同樣還有上文提到的陣列地址, 
  •  字符與數字的轉換,
  • 停止條件的巧妙使用,如這里for回圈采用sum=0停止的條件,是我個人之前沒看過的,

  

                                                                                                         

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551418.html

標籤:C

上一篇:[USACO07DEC]Mud Puddles S

下一篇:返回列表

標籤雲
其他(158260) Python(38107) JavaScript(25396) Java(18003) C(15221) 區塊鏈(8260) C#(7972) AI(7469) 爪哇(7425) MySQL(7152) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5334) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1964) Web開發(1951) HtmlCss(1928) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 菜鳥記錄:c語言實作PAT甲級1005--Spell It Right

    非常簡單的一題了,但還是交了兩三次,原因:對陣列的理解不足;對數字和字符之間的轉換不夠敏感。這將在下文中細說。 Given a non-negative integer N, your task is to compute the sum of all the digits of N, and ou ......

    uj5u.com 2023-04-28 13:05:42 more
  • [USACO07DEC]Mud Puddles S

    [USACO07DEC]Mud Puddles S 題目描述 Farmer John is leaving his house promptly at 6 AM for his daily milking of Bessie. However, the previous evening saw a ......

    uj5u.com 2023-04-28 13:05:37 more
  • 行程

    行程、輕量級行程和執行緒 行程在教科書中通常定義:行程是程式執行時的一個實體,可以把它看作充分描述程式已經執行到何種程度的資料結構的匯集。 從內核的觀點,行程的目的就是擔當分配系統資源(CPU時間、記憶體等)的物體。 當一個行程被創建時,他幾乎于父行程相同。它接受父行程地址空間的一個(邏輯)拷貝,并從進 ......

    uj5u.com 2023-04-28 13:05:22 more
  • 如何將 Spire.Doc for C++ 集成到 C++ 程式中

    Spire.Doc for C++ 是一個專業的 Word 庫,供開發人員在任何型別的 C++ 應用程式中閱讀、創建、編輯、比較和轉換 Word 檔案。 本文演示了如何以兩種不同的方式將 Spire.Doc for C++ 集成到您的 C++ 應用程式中。 通過 NuGet 安裝 Spire.Doc ......

    uj5u.com 2023-04-28 07:59:10 more
  • 線上問題排查回答(轉載)

    面試官:「你是怎么定位線上問題的?」 這個面試題我在兩年社招的時候遇到過,前幾天面試也遇到了。我覺得我每一次都答得中規中矩,今天來梳理復盤下,下次又被問到的時候希望可以答得更好。 下一次我應該會按照這個思路去答: 1、如果線上出現了問題,我們更多的是希望由監控告警發現我們出了線上問題,而不是等到業務 ......

    uj5u.com 2023-04-28 07:57:59 more
  • 行程

    行程、輕量級行程和執行緒 行程在教科書中通常定義:行程是程式執行時的一個實體,可以把它看作充分描述程式已經執行到何種程度的資料結構的匯集。 從內核的觀點,行程的目的就是擔當分配系統資源(CPU時間、記憶體等)的物體。 當一個行程被創建時,他幾乎于父行程相同。它接受父行程地址空間的一個(邏輯)拷貝,并從進 ......

    uj5u.com 2023-04-28 07:54:32 more
  • WPF教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架,屬于.NET Framework的一部分。它提供了統一的編程模型、語言和框架,真正做到了分離界面設計人員與開發人員的作業;同時它提供了全新的多媒體互動用戶圖形界面。 WP ......

    uj5u.com 2023-04-27 10:22:35 more
  • SpringBoot SpringSecurity 介紹(基于記憶體的驗證)

    SpringBoot 集成 SpringSecurity + MySQL + JWT 附原始碼,廢話不多直接盤 SpringBoot已經為用戶采用默認配置,只需要引入pom依賴就能快速啟動Spring Security。 目的:驗證請求用戶的身份,提供安全訪問 優勢:基于Spring,配置方便,減少大 ......

    uj5u.com 2023-04-27 10:09:09 more
  • 從原理聊JVM(三):詳解現代垃圾回收器Shenandoah和ZGC

    現代的垃圾回收器為了低停頓的目標可謂將“并發”二字玩到極致,Shenandoah在G1基礎上做了非常多的優化來使回收階段并行,而ZGC直接采用了染色指標、NUMA等黑科技,目的都是為了讓Java開發者可以更多的將精力放在如何使用物件讓程式更好的運行,剩下的一切交給GC,我們所做的只需享受現代化GC技... ......

    uj5u.com 2023-04-27 10:05:14 more
  • SpringBoot SpringSecurity 介紹(基于記憶體的驗證)

    SpringBoot 集成 SpringSecurity + MySQL + JWT 附原始碼,廢話不多直接盤 SpringBoot已經為用戶采用默認配置,只需要引入pom依賴就能快速啟動Spring Security。 目的:驗證請求用戶的身份,提供安全訪問 優勢:基于Spring,配置方便,減少大 ......

    uj5u.com 2023-04-27 10:05:02 more