浙大周末赛158—Fibonacci in the Pocket(C++)

直接贴代码

    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    int modBigNumber(string s,int modNumber)
    {
       long sum = 0;
       for (int i = 0; i < s.length(); ++i)
      {
         sum = sum*10 + s[i]-48;//这里要把每个字符的ASCII码减去48成为数字
         sum %= modNumber;
      }
      return sum;
    }
    string subtract(string ans,string b)
   {
      int flag=0;
      if(ans.length()<b.length()||ans.length()==b.length()&&ans<b){
	  flag=1;
	  ans.swap(b);
    }
    for(int i=ans.length()-1,j=b.length()-1;i>=0;i--,j--){
	ans[i]=ans[i]-(j>=0?b[j]-'0':0);
	if(ans[i]<'0')
	{
		ans[i]+=10;
		--ans[i-1];
	} 
}
    while(ans.length()&&ans[0]=='0') ans.erase(ans.begin());
    if(flag) ans.insert(0,"-");
    if(ans.empty()) return "0";
    return ans;
}//以上代码分别为大数的取余、减法运算,模板来自网络,我还不是很懂,必须好好理解 记住!!;
int main()
{
    int n;
    cin>>n;
    string s1[n],s2[n];
    for(int i=0;i<n;i++)
    {
	   cin>>s1[i]>>s2[i];
	   s1[i]=subtract(s1[i],"1");//前一个数减1;
	   int a=modBigNumber(s1[i],3);
	   int b=modBigNumber(s2[i],3);//两数分别取余;
	   if(a==b||(a==2&&b==0)||(a==0&&b==2))//只有这三种情况下所得为偶数;
	   cout<<0<<endl;
	   else cout<<1<<endl;
     }
     return 0;
}
上一篇:2019年浙江省赛 I Fibonacci in the Pocket


下一篇:剑指offer 7. 递归和循环 斐波那契数列