iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
佛心分享-刷題不只是刷題

CPE C++ 刷題系列 第 30

CPE C++ 刷題 Day 30

  • 分享至 

  • xImage
  •  

今天來解YKL34(UVA10101):Bangla Numbers

Bangla Numbers

https://ithelp.ithome.com.tw/upload/images/20241014/201555746VLfitWy3V.png

'kuti' (10000000), 'lakh' (100000), 'hajar' (1000), 'shata' (100)
假設數字:23764
從數字尾部開始,我們先取三位數字。764 可以被分為 7 shata 和 64,即「7 百 64」。
然後看剩下的數字:23,即「23 千」。
結果是:23 hajar 7 shata 64。

解題邏輯

處理 kuti 的部分:

將數字先除以 10000000(kuti),提取出千萬位的數字部分 kuti_part。
如果 kuti_part > 0,那麼對這部分進行遞迴處理,並加上 kuti 單位。
剩餘的數字保存在 num 變量中。
處理剩下的部分:

從單位最大的開始,遍歷 places,對每一個單位:
如果數字大於等於這個單位的數值,計算出應該有多少個該單位(例如:num / divisor),然後把對應的結果加到 result 字串中。
將處理完該單位後的餘數繼續存到 num 中,並處理下一個單位。
這個過程是從最大的單位處理到最小的單位,例如從 lakh 處理到 shata。
處理剩餘數字:

如果經過所有單位的處理之後,還有剩下的數字 num > 0,直接將剩餘數字加到結果中(這部分通常是100以內的數字,無需單位)
#include <iostream>
#include <vector>
using namespace std;

string convert_to_bangla(long long num) {
    vector<pair<string, long long>> places = {
        {"kuti", 10000000}, {"lakh", 100000}, {"hajar", 1000}, {"shata", 100}
    };
    
    if (num == 0) return "0";

    string result = "";
    long long kuti_part = num / 10000000;
    num %= 10000000;
    
    
    if (kuti_part > 0) {
        result += convert_to_bangla(kuti_part) + " kuti";
    }
    
   
    for (auto &place : places) {
        long long divisor = place.second;
        if (num >= divisor) {
        	if(result.size() != 0){
        		result += " ";
        	}
            result += to_string(num / divisor) + " " + place.first;
            num %= divisor;
        }
    }
    
    
    if (num > 0) {
		if(result.size() != 0){
    		result += " ";
    	}
        result += to_string(num);
    }

    return result;
}

int main() {
    long long num;
    int cases = 1;
    
    while (cin >> num) {
        string result = convert_to_bangla(num);
        cout.width(4);
        cout << cases;
        cout << ". " << result << endl;
        cases++;
    }

    return 0;
}

結語

這是我第一次參加鐵人賽,也是第一次寫這種文章,雖然寫得很像自己的筆記。
但經過這次的練習,讓我強迫自己每天練習一題,提升了一點coding的技巧。
最後還是沒也達到30天內練完48題的目標,有一點遺憾,如果有機會的話,我會找時間補上。
最後的最後,謝謝大家的觀看!


上一篇
CPE C++ 刷題 Day 29
系列文
CPE C++ 刷題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言