首页 > 代码库 > CSDN轻松周赛赛题:能否被8整除
CSDN轻松周赛赛题:能否被8整除
题目意思:
给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除。输入格式:多组数据,每组数据是一个非负整数。非负整数的位数不超过10000位。输出格式每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数。注意: 重排可以让0开头。
题目分析:
判断一个数是否能够被8整除,只需要判断这个数的后三位是否能够整除8即可,对于此题需要模拟判断所有的后三位数重排的六个数是够被8整除,只是注意一位数和两位数的时候需要自己判断。
AC代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int ff(char a,char b,char c){//判断三个数字组成的数能否被8整除 int s[7]; s[1]=(a-'0')*100+(b-'0')*10+(c-'0'); s[2]=(a-'0')*100+(c-'0')*10+(b-'0'); s[3]=(b-'0')*100+(c-'0')*10+(a-'0'); s[4]=(b-'0')*100+(a-'0')*10+(c-'0'); s[5]=(c-'0')*100+(a-'0')*10+(b-'0'); s[6]=(c-'0')*100+(b-'0')*10+(a-'0'); for(int i=1;i<=6;i++){ //cout<<s[i]<<endl; if(s[i]%8==0) return 1; } return 0; } char s[10005]; int main() { while(scanf("%s",s)!=EOF){ int len=strlen(s); int ok=0; if(len==1){ if((s[0]-'0')%8==0) ok=1; } else if(len==2){ if(((s[0]-'0')*10+(s[1]-'0'))%8==0) ok=1; if(((s[1]-'0')*10+(s[0]-'0'))%8==0) ok=1; } else { for(int i=0;i<len;i++){ if(ff(s[i],s[(i+1)%len],s[(i+2)%len])){ ok=1; break; } } } if(ok) printf("YES\n"); else printf("NO\n"); } return 0; }
CSDN轻松周赛赛题:能否被8整除
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。