日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

人民币金额大写问题

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人民币金额大写问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

在與財務相關的應用中,經常會用到人民幣金額的大寫,比如發票的打印程序。本題的任務是:從鍵盤輸入一個十億以內的正整數(int 類型),把它轉換為人民幣金額大寫(不考慮用戶輸入錯誤的情況)
比如,用戶輸入: 35201,程序輸出:叁萬伍仟貳佰零壹
用戶輸入: 30201,程序輸出:叁萬零貳佰零

算法設計

主要是利用棧來實現,因為棧的特點是先入后出,而我們通過計算機(整除和求余)讀入是從低位到高位讀入,而輸出的時候是從高位往低位讀。關于權和零的問題,因為比較特殊當size == 4或size==8,直接輸出‘萬’、‘億’,多個零的情況可以通過一個while 來做,如果棧頂為零,就一直出棧,直到不為零,但只輸出一個“零”。

算法實現

采用棧的數據結構(簡單版本)

class numStack{ protected:int *upper; // 存每個數字int size; // 存有多少個數字 public:numstack(){upper = new int[20]; // 題目說明了最大10億size = 0;} // 構造函數~numstack(){delete []upper;} // 析構函數void Push(const int n){upper[size++] = n;return ;} // 入棧int Top(){int i = size - 1;return upper[i];} // 取棧頂元素void Pop(int &n){n = upper[size-1];size--;return ;} // 出棧int theSize(){return size;} // size 為protected類型,只能通過函數訪問

主函數

int main() {int money;numstack myStack;cout<<"請輸入金額:";while(cin>>money){string upchar[9] = {"壹","貳","叁","肆","伍","陸","柒","捌","玖"};string unit[4] = {"十","百","千","萬"};int now = 0;while(money != 0){myStack.Push(money%10); // 依次入棧money = money / 10;}while(myStack.theSize()!=0){if(myStack.Top()!=0){ // 看棧頂元素是否為零myStack.Pop(now); // 是的話出棧并在下面把權表示出來cout<<upchar[now-1];if(myStack.theSize() == 8){cout<<"億";} else if (myStack.theSize()==0){cout<<"";}else{cout<<unit[(myStack.theSize()-1)%4]; // 輸出權}} else{while(myStack.Top()==0){myStack.Pop(now);if(myStack.theSize() ==4 && now==0){ // 輸出當萬位為0的時候‘萬’權cout<<"萬";}}if(myStack.theSize()!=0){cout<<"零"; // 中間的零只輸出一個}}}cout<<endl;cout<<"請輸入金額:"; // 格式控制}return 0; }

總結

以上是生活随笔為你收集整理的人民币金额大写问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。