华为机试—正整数加减运算式

题目:正整数加减运算式

通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。

输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

补充说明:

1. 操作数为正整数,不需要考虑计算结果溢出的情况。

2. 若输入算式格式错误,输出结果为“0”。

要求实现函数:

void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串

lInputLen:  输入字符串长度

【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例

输入:“4 + 7”   输出:“11”

输入:“4 - 7”   输出:“-3”

输入:“9 ++ 7”  输出:“0” 注:格式错误

#include <iostream>
#include <string>
using namespace std;  

#define N 10  

void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    char ch;
    int index1 = 0;
    int index2 = 0;
    int index3 = 0;
    char op1[N];
    char op[N];
    char op2[N];  

    int cnt = 0; 

    for(int i = 0; i < lInputLen; i++)
    {
        ch = pInputStr[i];
        if(ch == ' ')
        {
            cnt++;
            if(cnt > 2)
            {
                cout << "空格多余!"<<endl <<endl;
                return;
            }
            continue;
        }  

        if(cnt == 0)        //操作数op1.
            op1[index1++] = ch;
        else if(cnt == 1)   //操作符.
        {
            op[index2++] = ch;
            if(index2 > 1)//判断类似++的情况.
            {
                cout << "格式错误!"<<endl <<endl;
                return;
            }
        }
        else if(cnt == 2)   //操作数op2.
        {
            op2[index3++] = ch;
        }
    }
    op1[index1] = op[index2] = op2[index3] = '\0';  

    int iop1 = atoi(op1);
    int iop2 = atoi(op2);
    int temp = 0;
    if(op[0] == '+')
        temp = iop1 + iop2;
    else if(op[0] == '-')
        temp = iop1 - iop2;  

    cout << temp << endl <<endl;
}  

int main()
{
   // char *pch1 = "4 + 7";
   // int len1 = strlen(pch1);
   // char result1[N];
   // arithmetic(pch1,len1,result1);    

	char a[100];
	char result[100];

	while(gets(a)){
		arithmetic(a,strlen(a),result);
	}   

	cout<<endl;
    return 0;
}  

测试结果,可能想的不周全,欢迎查漏补缺:

时间: 2024-10-09 21:54:35

华为机试—正整数加减运算式的相关文章

华为机试—大数相减

题目:大数相减 输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果. 备注:1.两个整数都是正整数,被减数大于减数 示例: 输入:1000000000000001       1 输出:1000000000000000 #include <stdio.h> #include <string.h> #define MAX 100 //100位大数相减 int bigNumSub(char a[],char b[],char sub[]) { int i=0

华为机试集锦(Java)

题目链接http://blog.csdn.net/hackbuteer1/article/details/11132567 1.字符串过滤 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉. 比如字符串“abacacde”过滤结果为“abcde”. 解决:hashset可以解决 2.字符串压缩 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后

华为上机练习题--简单加减表达式计算

题目: 通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串. 输入字符串的格式为:"操作数1 运算符 操作数2","操作数"与"运算符"之间以一个空格隔开. 补充说明: 1.操作数为正整数,不需要考虑计算结果溢出的情况. 2.若输入算式格式错误,输出结果为"0". 要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

华为机试(3)

简单题   题目描述   输入一个数字,将其倒序输出,并输出其各个位上的乘积   输入描述  : 一个正整数,保证在int范围内   输出描述  : 两个数字,用空格隔开,第一个数字为其倒序的值,第二个数字是各个位上的乘积  输入样例  :134   输出样例  :431 12  解题思路:删繁就简,直接当字符串读入,处理就简单多了.  PS:此处不用纠结于题意,没有特别强调是按照一个数的格式输出,因此可以有前导0 void main() { int d; cin>>d; ostringstr

华为机试(5)

中级题  题目描述  你有一个容量为100的箩筐,给你30个物品,每个物品的体积已知问:最多能装多少个物品进箩筐  输入描述  :一行30个正整数,用空格隔开,表示每个物品的体积  输出描述  :一个数字,为最多能装下的物品数 输入样例(此处用3个物品作为样例,实际读入为30个)  :5 59 100  输出样例  :2 解题思路:利用性价比对所有物品进行排序,优先装性价比高的,在此题中,性价比就是物品的体积 #include<algorithm>//sort函数 #include<io

华为机试(4)

中级题  题目描述  输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序.     输入描述 :10个正整数,保证都在int范围内,用空格隔开   输出描述  :10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格  输入样例 :11 3 2 4 5 9 8 7 10 6  输出样例  :10 2 11 3 4 5 6 7 8 9  解题思路:调用C++自带的sort函数,重新改写compare函数即可. #include<string> #include&l

(华为机试)双向链表实现字符串条件表达式的求值

描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值. 表达式支持如下运算:"+.-.*./",其中"*"和"/"的优先级要高于"+"和"-": 不需要考虑括号,且表达式之间没有空格: 例如:对于表达式"3-2+15*2",该表达式值为31. 运行时间限制: 60 Sec 内存限制: 256 MByte 输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号

2014华为机试西安地区A组试题

2014华为机试西安地区A组试题 题目一.分苹果 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 题目分析: 这道题类似于整数划分的题目,这是很早的一道ACM的题目,主要思路就是考递归. ①当苹果数目或者篮子数目为1时候,就只有一种可能 ②当苹果数目小于篮子数目的时候,按照苹果数目来分配 ③当苹果数目大于篮子数目的时候,空一个盘子 + 先每个盘子放