1260 不一样的A+B

40 篇文章 3 订阅

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;
        }

	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值