程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1228-A+B

hdu 1228-A+B

編輯:C++入門知識

A + B
                                                                              Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Problem Description
讀入兩個小於100的正整數A和B,計算A+B.
需要注意的是:A和B的每一位數字由對應的英文單詞給出.

 

Input
測試輸入包含若干測試用例,每個測試用例占一行,格式為"A + B =",相鄰兩字符串有一個空格間隔.當A和B同時為0時輸入結束,相應的結果不要輸出.

 

Output
對每個測試用例輸出1行,即A+B的值.

 

Sample Input
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =

Sample Output
3
90
96

解題思路:把要處理的等式當做一個字符串,然後用一個s1字符數組記錄出現的小寫字母,當遇到空格時代表一個單詞結束,然後用這個單詞和每個數字的單詞進行比較,找出這個單詞代表的數字是多少,記錄下數字後將s1中的元素清除,再次從s1[0]開始保存單詞,直到字符串結束,找出 + 前後兩部分各代表的整數。
AC代碼:

#include<stdio.h>
#include<string.h>
int main()
{
	char str[30],s1[20];
	int i,j,len,s,sum1,sum2,flag;
    while(gets(str)!=NULL)
	{
		len=strlen(str);
		sum1=sum2=0; 
		flag=0; 
		for(i=0,j=0;i<len;i++)
		{
			if(str[i]>='a'&&str[i]<='z')  /*如果是小寫字母*/
				s1[j++]=str[i];  /*保存在s1中*/
			else if(str[i]==' '&&str[i-1]!='+')   /*判斷str[i-1]!='+'是為了避免將 + 當做一個字符串處理*/
			{
				s1[j]='\0'; /*千萬不能忘記字符串結束標志*/
				if(!strcmp(s1,"zero")) s=0; 
				else if(!strcmp(s1,"one")) s=1;
				else if(!strcmp(s1,"two")) s=2;
				else if(!strcmp(s1,"three")) s=3;
				else if(!strcmp(s1,"four")) s=4;
				else if(!strcmp(s1,"five")) s=5;
				else if(!strcmp(s1,"six")) s=6;
				else if(!strcmp(s1,"seven")) s=7;
				else if(!strcmp(s1,"eight")) s=8;
				else if(!strcmp(s1,"nine")) s=9; /*比較字符串,找出代表的數字*/
				j=0;  /*記得從零開始*/
				if(!flag)
					sum1=sum1*10+s; /*sum1保存 + 前面部分代表的數字*/
				else 
					sum2=sum2*10+s; /*sum2保存 + 後面部分代表的數字*/
			}
			else if(str[i]=='+')
				flag=1;  /*標記 + 已出現*/
		}
		if(sum1==0&&sum2==0) /*兩個數都是0時結束程序*/
			break; 
		else
		    printf("%d\n",sum1+sum2);
	}
	return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved