我怎么这么菜


私信TA

用户名:xujingcheng

访问量:18145

签 名:

Break Away

等  级
排  名 712
经  验 3889
参赛次数 4
文章发表 44
年  龄 10
在职情况 学生
学  校 NUAA
专  业

  自我简介:

毕业前学一下编程, 嗯! 是这样。

解题思路:  /*******按照除法规则递归调用即可,不是很需要题目给出的运算方法***********/


参考代码:

<First>/********************按照除法顺序********************************/
AC代码:
#include <iostream>
#include<string>
#include<cmath>
#define N 1000
using namespace std;
bool is_17x(int *arr,int begin,int end);
int main()
{
    string str;
    while(getline(cin,str))
    {
        int num[N];
        for(int i=0;i<str.size();++i)
        num[i]=str.at(i)-'0';
        if(num[0]==0) break;
        if(is_17x(num,0,str.size()-1)) cout<<1<<endl;
        else cout<<0<<endl;
    }
    return 0;
}
bool is_17x(int *arr,int begin,int end)
{
    if(end-begin==1) return !((arr[end]+arr[begin]*10)%17);
    arr[begin+1]=(arr[begin]*10+arr[begin+1])%17;
    return is_17x(arr,begin+1,end);
}
<Second>/************(按照题目意思)内存超限版本(反正都写了就记录一下-_-)*************/
#include <iostream>
#include<string>
#include<cmath>
#define N 1000
using namespace std;
bool is_17x(int *arr,int begin,int end);
int main()
{
    string str;
    while(getline(cin,str))
    {
        int num[N];
        for(int i=0;i<str.size();++i)
        num[i]=str.at(i)-'0';
        if(num[0]==0) break;
        if(is_17x(num,0,str.size()-1)) cout<<1<<endl;
        else cout<<0<<endl;
    }
    return 0;
}
bool is_17x(int *arr,int begin,int end)
{
      if(begin-end==-1)
      {
          int temp=arr[begin]*10+arr[end];
          if(temp%17==0) return true;
          else return false;
      }
      int _n=5*arr[end]/10,n_=5*arr[end]%10;
      int flag[end+1];//借位标志符
      for(int i=begin;i<=end;++i)
      flag[i]=0;
      if(arr[end]<n_) flag[end]=1; //个位不够减需要借位
      arr[end]=abs(arr[end]-n_);
      if(flag[end]==1)//个位不够减需要借位
      {
         if(arr[end-1]-1-_n<0) flag[end-1]=1; //十位不够减需要借位
         arr[end-1]=abs(arr[end-1]-1-_n);
      }
      if(flag[end]==0)//个位够减不需要借位
      {
         if(arr[end-1]-_n<0) flag[end-1]=1; //十位不够减需要借位
         arr[end-1]=abs(arr[end-1]-_n);
      }
      for(int i=end-2;i>=begin;--i)
      {
        if(flag[i+1])//有借位才需要处理
        {
        if(arr[i]>0) {--arr[i];break;}
        if(arr[i]==0) {arr[i]=9;flag[i]=1;}
        }
      }
      if(flag[begin]) ++begin;//如果最高位都需要借位,那么下次迭代将最高位去除
      return is_17x(arr,begin,end);
}


 

0.0分

0 人评分

  评论区

  • «
  • »