华为2019秋招笔试真题

别来无恙 提交于 2020-11-24 09:45:39

题目:请您写一个reverseAdd函数,该函数根据输入的两个正整数a和b,然后分别将他们的数字按照高位在右边的方式反转后求和。
例如:reverseAdd(123,456)== 321 + 654 == 975
程序原型:int reverseAdd(int a,int b)
输入:输入的a,b参数均为有效取值范围[1,70000]区间上的正整数。
输出:通过函数返回值输出结果;若输入的a或者b参数超出取值范围(小时1或者大于70000),则应输出-1;否则应按照要求输出数字反转后的和。

代码如下:

#include "iostream"
#include "algorithm"
#include "string"
using namespace std;

int main()
{

    string a,b; 
    while(cin>>a>>b)
    {
    int num_a=0,num_b=0;    
    for(int i=0;i<a.size();i++)
    num_a=num_a*10+a[i]-'0';
    for(int i=0;i<b.size();i++)
    num_b=num_b*10+b[i]-'0';
    if(num_a<1||num_a>70000||num_b<1||num_b>70000) cout<<-1<<endl;    
    else{num_a=0;num_b=0;
    for(int i=a.size()-1;i>=0;i--)
    num_a=num_a*10+a[i]-'0';
    for(int i=b.size()-1;i>=0;i--)
    num_b=num_b*10+b[i]-'0';
    cout<<num_a+num_b<<endl;    
        
        
    }    
    }

}

 

     题目:消除重复数字

    • 时间限制:3s
    • 空间限制:32768K
    • 题目描述:
      给定一个正整数,给出消除重复数字以后最大的整数
    • 输入描述:
      正整数,注意考虑长整数
      输出描述:
      消除重复数字以后的最大整数
    • 示例
      输入:423234
      输出:432

 解题思路:利用set的特性进行去重,再自定义一个降序的类就可以完成任务

set的自定义排序函数详细讲解:https://blog.csdn.net/u012604810/article/details/79804928

 

#include "iostream"
#include "algorithm"
#include "string"
#include "set" 
using namespace std;


struct cmp {
    bool operator() (const int& lhs, const int& rhs) const{
        return lhs > rhs;
    }
};

int main()
{
string str;
while(cin>>str){
    set<int,cmp> num;
    for(int i=0;i<str.size();i++){
        num.insert(str[i]-'0');
    }
    
    set<int,cmp>::iterator it=num.begin();
    while(it!=num.end()){
        cout<<*it;it++;
    }cout<<endl;
    
    
    
}

}

 

 

 

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!