# Modulo Operation# Lookup Table# Conditional Statements

c638 - 天干地支

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據給定的西元年,計算並輸出其對應的天干和地支。天干有十個,地支有十二個,它們會按照一定的順序循環使用。輸入的年份範圍是 1800 到 2018。

解題思路

這道題的解題思路是利用取模運算來確定天干和地支。天干的循環週期是 10,地支的循環週期是 12。因此,我們可以通過計算年份對 10 和 12 的餘數,來確定對應的天干和地支。程式碼使用了一系列的 if-else 條件判斷,根據餘數的值輸出對應的天干和地支字元。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入的年份數量。因為程式碼需要對每個輸入年份進行一次計算。
  • 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。

程式碼

#include <iostream>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	int a;
	while(cin >> a){
		if(a%10==0)
			cout << "庚";
		else if(a%10==1)
			cout << "辛";
		else if(a%10==2)
			cout << "壬";
		else if(a%10==3)
			cout << "癸";
		else if(a%10==4)
			cout << "甲";
		else if(a%10==5)
			cout << "乙";
		else if(a%10==6)
			cout << "丙";
		else if(a%10==7)
			cout << "丁";
		else if(a%10==8)
			cout << "戊";
		else if(a%10==9)
			cout << "己";
		if(a%12==0)
			cout << "申";
		else if(a%12==1)
			cout << "酉";
		else if(a%12==2)
			cout << "戌";
		else if(a%12==3)
			cout << "亥";
		else if(a%12==4)
			cout << "子";
		else if(a%12==5)
			cout << "丑";
		else if(a%12==6)
			cout << "寅";
		else if(a%12==7)
			cout << "卯";
		else if(a%12==8)
			cout << "辰";
		else if(a%12==9)
			cout << "巳";	
		else if(a%12==10)
			cout << "午";
		else if(a%12==11)
			cout << "未";
		cout << endl;
	}
}

Discussion