iT邦幫忙

2019 iT 邦幫忙鐵人賽

0
自我挑戰組

程式設計師大冒險系列 第 41

[41/150]Week01用C++解題,判斷迴文、大數加法

這週作業五題程式題,一題簡答。為了加強新學的語言,規定自己要用C++解題,然後FOR迴圈突然能用了。除了寫作業外,還跟過往UVa解題做連結。


【大綱】

  • 解題
    • 判斷迴文
    • 大數加法
  • 總結

【解題】

目前功力還不夠,缺變數就馬上宣告馬上用。
等之後能夠輕鬆解掉複雜題型,再去學Clean Code。

【判斷迴文】

asdfdsa = "T"
asdet = "F"

#include <stdio.h>
#include<iostream>

using namespace std;

int chek(int len,string st)
{
    int times=len/2;
    for(int i=0;i<times;i++)
    {
        //cout << st[i]<<" "<<st[len-i-1];
        if(st[i]!=st[len-i-1])
        {
            return 0;
        }
    }
    return 1;
}

int main()
{
    string st;
    int lest;
    cin >> st;
    lest=st.length();
    cout << chek(lest,st);
    return 0;
}

解題時間:22 min
與這題UVA11349-Symmetric Matrix類似,有解過只是沒有貼文上來。
熟悉一下C++語法,就能輕鬆解開。

【大數加法】

int 極限為2147483647~–2147483647 – 1
但是題目數字會超過極限,所以要取一部分字元在做運算。
10035 Primary Arithmetic同樣解題思路,差別在於前者求相加結果;後者求進位次數。

#include <string>
#include<iostream>

using namespace std;

string add(string o,string t)
{
    string sum,big,min;
    if(o.length()>t.length())
    {
        big=o;
        min=t;
    }
    else
    {
        big=t;
        min=o;
    }
    int io,it,carry;
    carry=0;
    int milen=min.length();
    int bilen=big.length();
    
    for(int sti=0;sti<milen;sti++)
    {
        io=min[milen-1-sti] - '0';
        it=big[bilen-1-sti] - '0';
        sum+=(io+it+carry)%10 + '0';
        (io+it+carry)>9?carry=1:carry=0;
        
    }
    
    int sub=bilen-milen;
    for(int lai=0;lai<sub;lai++)
    {
        it=big[sub-lai-1] - '0';
        sum+=(it+carry)%10 + '0';
        (it+carry)>9?carry=1:carry=0;
        
    }
    
    string newsum;
    for(int nei=sum.length();nei>=0;nei--)
    {
        newsum+=sum[nei];
    }
    return newsum;
}


int main()
{
    //sto,stt=stone,sttwo
    string sto,stt;
    cin>> sto>>stt;
    cout <<sto<<endl<<stt<<endl;
    cout << add(sto,stt);
    return 0;
}   
    

解題時間:1 hr 5 min
關於字串語法C++和Python相差甚多,C++要背的語法多,Python使用上較為直覺。

要取字串1~3
c++
string st=st.assign(字串,0,3)
Python
st=字串[0:3]
解題時間都花在找語法上,不過正式考試時間有限,所以後來改用迴圈解題。

【總結】

大數問題讓我翻到剛開始寫文的文章,有些地方文筆不滿意就做了大改。
本來是想拿這串系列文,作為找工作籌碼。
但是文章越寫越覺得這是扣分項目,就覺得寫不下去。

感謝撥冗閱讀,祝各位事事順心。


上一篇
[40/150]Week01挑戰「程式導師計畫」(學生角度)
下一篇
[42/150]Week01初學command line(命令提示字元)
系列文
程式設計師大冒險115

尚未有邦友留言

立即登入留言