杭电oj-1228-A+B

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

思路,先用gets函数读入计算式,然后暴力求出答案,若和sum为零,则不输出结束程序,否则则输出sum的值

代码如下:

#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
char s[105];
//计算是十位还是个位
int cifang(int i)
{
    if(i==0)
        return 1;
    else
        return 10;


}
int main()
{
    //数组清零
    memset(s,0,sizeof(s));
    //读入计算式
    while(gets(s))
    {
        //测量长度
        int l1=strlen(s);
        int l2;//表示加号的位置
        int sum=0;//和
        int k=0;//表示位数
        //找到加号的位置
        for(int i=0;i<l1;i++)
            if(s[i]=='+')
            {
                l2=i;
                break;
            }
        //暴力算出加号前的数为多少
        for(int i=l2-2;i>1;i--)
        {
            if(s[i]=='o'&&s[i-1]=='r'&&s[i-2]=='e')
                sum+=0*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='n'&&s[i-2]=='i')
                sum+=9*cifang(k);
            else if(s[i]=='t'&&s[i-1]=='h'&&s[i-2]=='g')
                sum+=8*cifang(k);
            else if(s[i]=='n'&&s[i-1]=='e'&&s[i-2]=='v')
                sum+=7*cifang(k);
            else if(s[i]=='x'&&s[i-1]=='i'&&s[i-2]=='s')
                sum+=6*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='v'&&s[i-2]=='i')
                sum+=5*cifang(k);
            else if(s[i]=='r'&&s[i-1]=='u'&&s[i-2]=='o')
                sum+=4*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='e'&&s[i-2]=='r')
                sum+=3*cifang(k);
            else if(s[i]=='o'&&s[i-1]=='w'&&s[i-2]=='t')
                sum+=2*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='n'&&s[i-2]=='o')
                sum+=1*cifang(k);
            else if(s[i]==' ')
                //若有空格,则位数变十位
                k++;
            else
                continue;
        }
        //将位数改为个位
        k=0;
        //暴力计算出加号之后的值,再加上加号之前的和
        for(int i=l1-3;i>l2+3;i--)
        {
            if(s[i]=='o'&&s[i-1]=='r'&&s[i-2]=='e')
                sum+=0*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='n'&&s[i-2]=='i')
                sum+=9*cifang(k);
            else if(s[i]=='t'&&s[i-1]=='h'&&s[i-2]=='g')
                sum+=8*cifang(k);
            else if(s[i]=='n'&&s[i-1]=='e'&&s[i-2]=='v')
                sum+=7*cifang(k);
            else if(s[i]=='x'&&s[i-1]=='i'&&s[i-2]=='s')
                sum+=6*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='v'&&s[i-2]=='i')
                sum+=5*cifang(k);
            else if(s[i]=='r'&&s[i-1]=='u'&&s[i-2]=='o')
                sum+=4*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='e'&&s[i-2]=='r')
                sum+=3*cifang(k);
            else if(s[i]=='o'&&s[i-1]=='w'&&s[i-2]=='t')
                sum+=2*cifang(k);
            else if(s[i]=='e'&&s[i-1]=='n'&&s[i-2]=='o')
                sum+=1*cifang(k);
            else if(s[i]==' ')
                //若有空格,则位数变十位
                k++;
            else
                continue;
        }
        //进行判断是否和为零
        if(sum==0)
            //为零,结束
            break;
        else
            //不为零,输出
            printf("%d\n",sum);
        //数组清零
        memset(s,0,sizeof(s));
    }
    return 0;
}

  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值