C++课题。读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出

读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。
具体的输入输出格式规定如下:
输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为 "A + B = ",相邻两字符串有一个空格间隔。当A和B同时为zero时输入结束,相应的结果不要输出。
输出格式:对每个测试用例输出1行,即A+B的值。

输入样例:

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

输出样例:
three
nine zero
nine six
网上找到这个
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
int s1=0,s2=0,s;
loop:while(cin>>a)
{
if(a=="one")
s1=s1*10+1;
else if(a=="two")
s1=s1*10+2;
else if(a=="three")
s1=s1*10+3;
else if(a=="four")
s1=s1*10+4;
else if(a=="five")
s1=s1*10+5;
else if(a=="six")
s1=s1*10+6;
else if(a=="seven")
s1=s1*10+7;
else if(a=="eight")
s1=s1*10+8;
else if(a=="nine")
s1=s1*10+9;
else if(a=="+")
break;
}

while(cin>>b)
{
if(b=="one")
s2=s2*10+1;
else if(b=="two")
s2=s2*10+2;
else if(b=="three")
s2=s2*10+3;
else if(b=="four")
s2=s2*10+4;
else if(b=="five")
s2=s2*10+5;
else if(b=="six")
s2=s2*10+6;
else if(b=="seven")
s2=s2*10+7;
else if(b=="eight")
s2=s2*10+8;
else if(b=="nine")
s2=s2*10+9;
else if(b=="zero")
s2=s2*10+0;
else if(b=="=")
break;
}
s=s1+s2;
cout<<s<<endl;

if((s)!=0)
{
s1=s2=0;
goto loop;
}
}

但是输出是数字而且 zero + zero = 会输出0
求大神指导怎么做

//你题目中那代码太差了,还用什么goto,而且输出也不符合题目要求。。。。
//帮你写了一份
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
//By:@qwn3213
//2015.09.02
string str[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int input()
{
    string a;
    int s1=0;
    while(cin>>a)
    {
        if(a=="+"||a=="=")
            break;
        for(int i=0;i<10;i++)
            if(a==str[i])
            {
                s1=s1*10+i;
                break;
            }
    }
    return s1;
}
void output(int x)
{
   char s[20];
   sprintf(s,"%d",x);
   for(int i=0;s[i]!=0;i++)
       cout<<str[s[i]-'0']<<" ";
   cout<<endl;
}
int main()
{
    int a,b;
    while(1)
    {
        a=input();
        b=input();
        if(a==0&&b==0)
            return 0;
        output(a+b);
    }
    return 0;
}

 

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-02
容易,搞个枚举型的,从0到198,最大99+99,全用英文然后匹配输入,输出,就ok了
第2个回答  2015-09-02
其实,这个程序还有一个bug,就是输入100+101,就会崩溃,不过约定输入在0~99之间,就ok了。如果想完美解决,就搞两个数组,一个保存0~99,一个保存0~198,开始查找都用第一个数组,最后一行输出,换成第二个数组,就完美了。
第3个回答  2015-09-02

第4个回答  2015-09-05
用字典树做啊,将英文单词存入字典树,每个单词对应个数字,分分钟得事啊!

C++课题。读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和...
for(int i=0;i<10;i++) if(a==str[i])

pascal读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的...
const num:array[0..9]of string[5]=('zero','one','two','three','four','five','six','seven','eight','nine');var a,b,i,n:integer; c:char; ss:string; ans:array[1..100]of integer;function readnum:integer;var s:string[8]; j:integer;begin while ss[i] in [' ...

用英文单词模拟数学计算 用C++做 急
int b[10]={0,1,2,3,4,5,6,7,8,9};for(int i=0;i<9;i++)if(str==a[i])return b[i];} int main(){ string a[10];int i,j,s1,s2,s;for(i=0;i<10;i++){ cin>>a[i];if(a[i]=="=")break;} if(a[1]=="+"){ s1=trans(a[0]);if(a[3]=="=")s...

读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末 ...
char a[10], b[10];int k;int i,j;int len1 , len2;int num1,num2 ;int sum,mid,ind,max;while(scanf("%s %s %d",a ,b , &k) != EOF){ num1= num2 = 0;sum = 0;i = j = 0;max = 0;ind = 0;len1 = strlen(a);len2 = strlen(b);for(i = 0; i < le...

C++两个数字 比大小的问题. 请告诉指点。一定要解释 注释 谢谢老_百度...
cin>>b; \/\/将你输入的第二个整数赋值给b if(a>b) \/\/判断如果a大于b,屏幕打印字符串:a确确实实大一点点 cout<<a<<"确确实实大一点点"<<endl;else if (a==b) \/\/判断如果a等于b,屏幕打印字符串:a,b大小相同 cout<<"a,b大小相同"<<endl;else \/\/判断如果a小于b,屏幕打印字符...

C++编程:输入三个整数,并按大小顺序输出
C++编程中的一个常见任务是处理整数的排序。当需要输入三个整数a、b和c,然后按从小到大的顺序输出时,可以使用以下逻辑来实现:首先,比较a和b,如果a小于b(ab成立),则判断b和c的大小。如果b大于c(bc成立),说明c是当前最小值,b是中间值,a是最大值。否则,如果a大于c(ac成立),则b是...

用c++编程 输入两个正整数a,n,求a的n次方 谢谢!!
{ int a,n,num=1;\/\/定义变量 cout<<"请输入a和n:"<<endl;\/\/输出提示 cin>>a>>n;\/\/输入a和n int i=1;\/\/定义变量,用于控制循环次数 while(i<=n)\/\/循环条件为i小于等于n时 { num=num*a;\/\/每次循环都乘一次a i++;\/\/i加一 } cout<<a<<"的"<<n<<"次方是:"<<num<<...

用英文单词模拟数学计算 用c++作
题目很简单。。。财富值到100,就帮你做了

如何用c++算法计算出所有平方数的和呢?
小于100的正整数,任意两个之和的最小值是1+2=3,最大值99+100=199;对应的平方数范围,最小是2^2=4,最大是14^2=196。没有直接推导的方式,并且p个数的组合不是唯一的。因此,可以借助编程,按照一定的规则来进行筛选,选出尽可能多的数,即可求得p。算法设计:从分布规律看,平方数越大...

求C++写的高精度整除程序!
一种思路。首先是大数的表达。利用数组或链表,按照10000(或其他的值,只要保证小于你使用类型的二次根就行)为一位,保存。然后是大数的加减法和乘法(除法会用到)。这个利用竖式计算法就可以了。至于商的计算,可以考虑3\/2取1。什么意思,就是仅计算被除数的前三位与除数的前两位的商,然后仅取...

相似回答