華為2019秋招筆試真題


題目:請您寫一個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;
    
    
    
}

}

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM