原题链接:数字整除
解题思路: /*******按照除法规则递归调用即可,不是很需要题目给出的运算方法***********/
参考代码:
<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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复