1260 不一样的A+B
Time Limit : 2000/1000 MS(Java/Others) | Memory Limit :65536/32768 KB(Java/Others)
Submits : 641 | Solved : 357
Description
读入两个小于100的正整数A和B,计算A+B的值并输出。
需要注意的是:整数A和B的每一位数字由对应的英文单词给出。如整数34表示为three four。
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔。当A和B同时为0时输入结束,此时的结果不要输出。
Output
对每个测试用例输出一行结果,即A+B的值,用数值形式输出。
Sample Input
one + two =three four + five six =zero seven + eight nine =zero + zero =
Sample Output
39096
HINT
Source
浙江大学研究生复试题目(2005)
最开始写的是c版本是很早之前写的在这里也粘贴一下:
#include<stdio.h> #include<string.h> #include<math.h> int main() {char plus[1]="+",ch[105],c[105],div[105][105],b[105][105]={"zero","one","two","three","four","five","six","seven","eight","nine"};int select=0,j,l=0,ii=0,blank=0,q=0,i,A=0,B=0,temp=0,num[100],count[100],k=0;while(gets(ch)!=NULL){select=0,l=0,ii=0,blank=0,q=0,A=0,B=0,temp=0,num[100],count[100],k=0;int len=strlen(ch);for(i=0;i<len;i++){q=0;c[ii]=ch[i];//利用空格对输入总的字符串进行单个数字英文进行拆分if(ch[i]=='+')select=1;//为了区分+前后的两个数,方便利用不同的数字数组进行存储if(ch[i]==' '){q=1;//用来对ii的首项元素下标赋初0c[ii]='\0';for(j=0;j<10;j++){if(strcmp(b[j],c)==0&&select==0)//字符串和英文字母比较{num[l]=j;//用来统计各个数字l++;//1、统计数字的个数 2、为了便于计算总合}if(strcmp(b[j],c)==0&&select==1){count[k]=j;//和上面同理k++;}}strcpy(div[blank],c);//对字符串blank++;if(blank>0){ii=0;}}if(q==0)ii++;}for(i=0;i<l;i++){int y=pow(10,l-i-1);A+=num[i]*y;}for(i=0;i<k;i++){int g=pow(10,k-i-1);B+=count[i]*g;}if(A+B!=0)printf("%d\n",A+B);elsebreak;}return 0; }
今天写的java版本代码用了map集合更简单点:package com.test;import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; import java.util.Set;public class test2 {public static void main(String[] args){Map<String, Integer> map=new HashMap<String, Integer>();map.put("zero",0);map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);map.put("five",5);map.put("six",6);map.put("seven",7);map.put("eight",8);map.put("nine",9);Scanner sc=new Scanner(System.in);String str=null;str=sc.nextLine();while(true){int[] a=new int[1000];int[] b=new int[1000];int c=0;String[] strs=str.split(" ");int m = 0,l=0,l1=0;for(int i=0;i<strs.length;i++){if(strs[i].toString().equals("+")){m=i;break;}if(!(strs[i].toString().equals(""))){a[l++]=map.get(strs[i].toString());}}for(int i=m+1;i<strs.length;i++){if(strs[i].toString().equals("=")){m=i;break;}b[l1++]=map.get(strs[i].toString());}int x=0,y=0;for(int i=0;i<l;i++){x+=(int) (a[i]*Math.pow(10, (l-i-1)));}for(int i=0;i<l1;i++){x+=(int) (b[i]*Math.pow(10, (l1-i-1)));}if(x==y&&x==0) break;System.out.println(x+y);str=sc.nextLine();x=y=l=l1=0;}} }