d086 - 態度之重要的證明
題目描述
題目要求讀取英文單字,計算單字中每個字母對應的數值(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;
}
}