---
# System prepended metadata

title: 函式練習的題解
tags: [題解]

---

# 函式練習的題解

---
# 費氏數列公因數

- 想法 : 利用建表的方式得到費氏數列每一項，再利用__gcd函式(上禮拜有講)來取得最大公因數
- 題解 :
``` cpp=
#include<bits/stdc++.h>
#define ll long long

using namespace std;

int main(){
	ll a,b,F[10000];
	F[0]=0,F[1]=1;
	
	for(int i=2;i<91;++i){
		F[i]=F[i-1]+F[i-2];
	}
	int n;
	
	cin >>n;
	for(int i=0;i<n;++i){
		cin >>a>>b;
		cout<<__gcd(F[a],F[b])<<'\n';		
	}
	
	return 0;
}
```

----

# 計算練習
- 想法 : 建立四個副函式即可
``` cpp=
#include<bits/stdc++.h>
#define ll long long
#define MXN 100005

using namespace std;

void add(ll a,ll b){
	cout<<a+b<<'\n';
}

void min(ll a,ll b){
	cout<<a-b<<'\n';
}

void mul(ll a,ll b){
	cout<<a*b<<'\n';
}

void divi(ll a,ll b){
	cout<<a/b<<'\n';
}

int main(){
	ll n,a,b;char op;
	cin >>n;
	for(int i=0;i<n;++i){
		cin >>a>>op>>b;
		if(op=='+')add(a,b);
		if(op=='-')min(a,b);
		if(op=='*')mul(a,b);
		if(op=='/')divi(a,b);
	}
}

```

----

# 字串處理

- 想法1:直接使用STL string的函式
- 題解:

```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(0);cin.tie(0);

    int op;
    while(cin>>op){
        if(op==1){
            string a;
            cin>>a;
            cout<<a.size();
        }else if(op==2){
            string a;
            cin>>a;
            reverse(a.begin(),a.end());
            cout<<a;
        }else{
            string a,b;
            cin>>a>>b;
            cout<<(a==b?"Yes":"No");
        }
        cout<<"\n";
    }
}
```

- 想法2:字元陣列，手刻函式
- 題解:

``` cpp=
#include<bits/stdc++.h>
using namespace std;

int length(char s[]);
void reverse();
void cmp();

char s1[505],s2[505];

int main(){
	char s[505];
	int mod;
	
	while(cin >>mod){
		cin.ignore();
		cin.getline(s1,500);
		
		if(mod==1)cout<<length(s1)<<'\n';
		if(mod==2)reverse();
		if(mod==3)cmp();
	}
}


int length(char s[]){
	int i=1;
	while(s[i]!='\0')++i;
	return i;
}

void reverse(){
	int l=length(s1);
	for(int i=l-1;i>=0;--i)cout<<s1[i];
	cout<<'\n';
}

void cmp(){
	cin.getline(s2,500);
	int l1=length(s1),l2=length(s2);

	if(l1!=l2){
		cout<<"No\n";
		return;
	}

	for(int i=0;i<l1;++i){
		if(s1[i]!=s2[i]){
			cout<<"No\n";
			return;
		}
	}
	cout<<"Yes\n";
	return;
}

```


###### tags: `題解` 
> *2022/1/2 *
> [name=WXDai] [time=Sun, Jan 02, 2022 00:40 ] [color=#907bf7]