博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算A+B
阅读量:6475 次
发布时间:2019-06-23

本文共 2065 字,大约阅读时间需要 6 分钟。

一个比较简单的程序题。题目虽简单,但写起来需要注意的东西还是很多的。

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

输入:
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
输出:
对每个测试用例输出1行,即A+B的值.
样例输入:
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
样例输出:
3 90 96

下面是我写的一段程序:

#include <iostream>
#include <
string>
#include <cstdlib>
#include <sstream>
using 
namespace std;
const 
string digits[
10]={
"
zero
",
"
one
",
"
two
",
"
three
",
"
four
",
"
five
",
"
six
",
"
seven
",
"
eight
",
"
nine
"};
string& trim(
string& str){
    
if(str.empty())
        
return str;
    str.erase(
0,str.find_first_not_of(
'
 
'));
    str.erase(str.find_last_not_of(
'
 
')+
1);
    
    
return str;
}
int index(
const 
string& s){
    
for(
int i=
0;i<
10;i++)
        
if(s==digits[i])
            
return i;
    
return -
1;
}
int str2int(
const 
string& s){
    
int n=
0;
    size_t pos=
0;
    size_t pos2=s.find(
'
 
');
    
string sub;
    
int di;
    
while(pos2!=
string::npos){
        sub=s.substr(pos,pos2-pos);
//
        cout<<sub<<endl;
        di=index(sub);
        n=n*
10+di;
        pos=pos2+
1;
        pos2=s.find(
'
 
',pos);
    }
    sub=s.substr(pos);
//
    cout<<sub<<endl;
    di=index(sub);
    n=n*
10+di;
    
return n;
}
int add_str(
string str){
    size_t pos,pos2;
    pos=str.find(
'
+
');
    
string s1=str.substr(
0,pos);
    pos2=str.find(
'
=
');
    
string s2=str.substr(pos+
1,pos2-(pos+
1));
    trim(s1);trim(s2);
    
int a1=str2int(s1);
    
int a2=str2int(s2);
    
return a1+a2;
}
string int2str(
int a){
    ostringstream 
out;
    
out<<a;
    
string s=
out.str();
    
string s2;
    
string::iterator ite;
    
for(ite=s.begin();ite!=s.end();++ite){
        s2+=digits[*ite-
'
0
'];
        s2+=
'
 
';
    }
    
return s2;
}
int test1(){
    
for(
int i=
0;i<
10;i++){
        
int a1=rand()%
1000;
        
int a2=rand()%
1000;
        
int sum=a1+a2;
        
string s1=int2str(a1);
        
string s2=int2str(a2);
        
string str=s1+
"
 + 
"+s2+
"
 = 
";
        
int sum2=add_str(str);
        cout<<a1<<
'
 
'<<a2<<
"
 <
"<<str<<
"
"<<sum<<
"
 
"<<sum2;
        
if(sum==sum2)
            cout<<
"
 OK
"<<endl;
        
else
            cout<<
"
 NO
"<<endl;
    }
    
return 
0;
}
int main1(){
    
string str;
    
int sum;
    
while(getline(cin,str)){
        sum=add_str(str);
        cout<<sum<<endl;
    }
    
return 
0;
}
int main(){
    test1();
}

下面是测试结果:

 

 

 

转载于:https://www.cnblogs.com/xkfz007/archive/2012/07/16/2594151.html

你可能感兴趣的文章
原生Js交互之DSBridge
查看>>
Matlab编程之——卷积神经网络CNN代码解析
查看>>
白洋淀周末游
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>
copy strong weak assign的区别
查看>>
OpenCV 入门
查看>>
css 3D transform变换
查看>>
ele表格合并行之后的selection选中
查看>>
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>
HTML5新特性教程
查看>>
SpringBoot 实战 (十七) | 整合 WebSocket 实现聊天室
查看>>
ImageOptim-无损图片压缩Mac版
查看>>
12 Go语言map底层浅析
查看>>
vue-resumer 项目中 element-ui 遇到的 textarea autosize 问题
查看>>
以主干开发作为持续交付的基础
查看>>
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
JavaScript函数(二)
查看>>
Airbnb改进部署管道安全性,规范部署顺序
查看>>