# Math# String# Modulo

d124 - 3的倍数

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷一個大整數(以字串形式輸入)是否為 3 的倍數。輸入的數字範圍是 -10^10001 到 10^10001。

解題思路

由於輸入的數字太大,無法直接使用整數類型儲存,因此需要將輸入的字串轉換為數字,並計算其各位數字的和。根據整數除以 3 的餘數的性質,一個數字是否為 3 的倍數取決於其各位數字的和是否為 3 的倍數。如果各位數字的和為 3 的倍數,則原數字為 3 的倍數,反之則不是。

程式碼首先讀取輸入的字串。然後,計算字串中所有數字字符的總和。如果字串的第一個字符是負號,則跳過負號再計算總和。最後,判斷總和是否為 3 的倍數,並輸出相應的結果。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。
  • 空間複雜度: O(1),因為只使用了常數級別的額外空間。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	string a;
	while(cin >> a){
		int n=0;
		if(a[0]=='-'){
			for(int i=1;i<a.length();i++)
				n+=a[i]-48;
		}
		else{
			for(int i=0;i<a.length();i++)
				n+=a[i]-48;
		}
		
		if(n%3==0)
			cout << "yes\n";
		else
			cout << "no\n";
	}
}

Discussion