1. 程式人生 > >九度OJ:題目1010 A+B

九度OJ:題目1010 A+B

題目描述:
讀入兩個小於100的正整數A和B,計算A+B.
需要注意的是:A和B的每一位數字由對應的英文單詞給出.
輸入:
測試輸入包含若干測試用例,每個測試用例佔一行,格式為"A + B =",相鄰兩字串有一個空格間隔.當A和B同時為0時輸入結束,相應的結果不要輸出.
輸出:
對每個測試用例輸出1行,即A+B的值.
樣例輸入:
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
樣例輸出:
3
90

96

[解題思路]

首先,寫一個函式將英文單詞轉化為數字,如下:

int judgeNum(char* num){
	if(strcmp(num,"zero")==0) return 0;
	else if(strcmp(num,"one")==0) return 1;
	else if(strcmp(num,"two")==0) return 2;
	else if(strcmp(num,"three")==0) return 3;
	else if(strcmp(num,"four")==0) return 4;
	else if(strcmp(num,"five")==0) return 5;
	else if(strcmp(num,"six")==0) return 6;
	else if(strcmp(num,"seven")==0) return 7;
	else if(strcmp(num,"eight")==0) return 8;
	else if(strcmp(num,"nine")==0) return 9;
	else return -1;
}

該函式將單詞轉化為數字後返回,那麼怎樣處理返回來的數字呢?

然後我們觀察輸入的樣式,前後是由"+"隔開的,所以我們需要分別用兩個整形(假設為a,b)記錄前後的數字;

在數字傳回來之後,因為輸入有兩位數(比如 one two表示12) ,這時候我們應該將a,b初始化為0,可用a=10*a+(傳回來的數)進行確定a,b的值,程式碼如下:

		while(ch!='\n'){
			scanf("%s",num);
			if(strcmp(num,"+")==0) sign=1;//標記是否出現"+"
			if(strcmp(num,"=")==0) break;//一定要加,否則最後可能不會終止程式
			if((strcmp(num,"+")!=0)&&(strcmp(num,"=")!=0)){//傳入的不能為符號
				if(!sign) a=10*a+judgeNum(num);
				else b=10*b+judgeNum(num);
			}
			ch=getchar();
		}

[程式程式碼]

#include<stdio.h>
#include<string.h>

int judgeNum(char* num){
	if(strcmp(num,"zero")==0) return 0;
	else if(strcmp(num,"one")==0) return 1;
	else if(strcmp(num,"two")==0) return 2;
	else if(strcmp(num,"three")==0) return 3;
	else if(strcmp(num,"four")==0) return 4;
	else if(strcmp(num,"five")==0) return 5;
	else if(strcmp(num,"six")==0) return 6;
	else if(strcmp(num,"seven")==0) return 7;
	else if(strcmp(num,"eight")==0) return 8;
	else if(strcmp(num,"nine")==0) return 9;
	else return -1;
}
int main(){
	char num[40];
	while(1){
		int a=0,b=0;
		char ch=' ';
		int sign=0;
		while(ch!='\n'){
			scanf("%s",num);
			if(strcmp(num,"+")==0) sign=1;//標記是否出現"+"
			if(strcmp(num,"=")==0) break;//一定要加,否則最後可能不會終止程式
			if((strcmp(num,"+")!=0)&&(strcmp(num,"=")!=0)){//傳入的不能為符號
				if(!sign) a=10*a+judgeNum(num);
				else b=10*b+judgeNum(num);
			}
			ch=getchar();
		}
		if(a==0&&b==0) break;
		else{
			printf("%d\n",a+b);
		}
	}
	return 0;
}
/*
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
*/
[題目網址]
http://ac.jobdu.com/problem.php?pid=1010