现在的位置: 首页 > 综合 > 正文

CSDN 轻松周赛赛题:能否被8整除

2018年01月19日 ⁄ 综合 ⁄ 共 1162字 ⁄ 字号 评论关闭

能否被8整除
给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除。

输入格式: 多组数据,每组数据是一个非负整数。非负整数的位数不超过10000位。
输出格式 每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数。

注意:重排可以让0开头。

参考:http://blog.csdn.net/computer_liuyun/article/details/40924233

快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结

http://blog.csdn.net/u012605629/article/details/41014429

/*
能否被8整除
给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除。

输入格式: 多组数据,每组数据是一个非负整数。非负整数的位数不超过10000位。
输出格式 每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数。
注意:重排可以让0开头。

参考别人的 
*/
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;

int num[30],cnt[10];
char str[10005];

int main(){
	
	int k,i,j,z,f1,f2,len;
	while(scanf("%s",str)!=EOF)
	{
		memset(cnt,0,sizeof(cnt));
		memset(num,0,sizeof(num));
		k=0;
		len=strlen(str);
		for(i=0;i<len;i++) 
		{
			if(cnt[str[i]-'0']<3)
				num[k++]=str[i]-'0';
				cnt[str[i]-'0']++;
		}
		if(k==1)
		{
			if(num[k-1]%8==0)
				printf("YES\n");
			else
				printf("NO\n");
		}
		else if(k==2)
		{
			if((num[k-1]*10+num[k-2])%8==0||(num[k-2]*10+num[k-1])%8==0)
				printf("YES\n");
			else
				printf("NO\n");
		}
		else
		{
			f1=0,f2=0;
			for(i=0;i<k;i++)
			{
				if(f1) break;
				for(j=0;j<k;j++)
				{
					if(f2) break;
					if(j!=i)
					{
						for(z=0;z<k;z++)
							if(z!=i&&z!=j)
								if((num[i]*100+num[j]*10+num[z])%8==0)
								{
									printf("YES\n");
									f1=1;
									f2=1;
									break;
								}
					}
				}
			}
		if(f1==0)
			printf("NO\n");
		}
	}
	return 0;
}

抱歉!评论已关闭.