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的首项元素下标赋初0 c[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); else break; } 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; } } }