# String Manipulation# Character Encoding# Conditional Logic

d086 - 態度之重要的證明

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取英文單字,計算單字中每個字母對應的數值(a=1, b=2, ..., A=1, B=2, ...),並將所有字母的數值加總。如果輸入的字串包含非字母字符,則輸出 "Fail"。輸入為 "0" 時結束程式。

解題思路

程式碼首先讀取一個字串。然後,它遍歷字串中的每個字符。對於每個字符,它檢查該字符是否為大寫字母('A' 到 'Z')或小寫字母('a' 到 'z')。如果是,則計算其對應的數值(大寫字母減去 'A' 的 ASCII 值,小寫字母減去 'a' 的 ASCII 值),並將其加到總和中。如果遇到非字母字符,則將總和重置為 0 並跳出迴圈。最後,如果總和為 0,則輸出 "Fail",否則輸出總和。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷字串中的每個字符一次。
  • 空間複雜度: O(1)。程式碼只使用固定數量的變數,不隨輸入大小而變化。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	string a;
	while(cin >> a,a!="0"){
		int sum=0;
		for(int i=0;i<a.length();i++){
			if(a[i]>=65&&a[i]<=90)
				sum+=a[i]-64;
			else if(a[i]>=97&&a[i]<=122)
				sum+=a[i]-96;
			else{
				sum=0;break;}	
		}
		if(sum==0)
			printf("Fail\n");
		else
			printf("%d\n",sum);
		sum=0;	 
	}
}

Discussion