我的想法是 2,4,8只要判斷最後1,2或3位數可否整除即可
計算 奇數位及偶數位的和可以判斷 11的倍數
全部位數和可判斷3、9的倍數
看最後一位應可以判斷5、10的倍數
而6是2x3
程式碼看有沒有人補了,還沒人補,我就補了
// NPSC2015-j1f F.頗旺愛數樹div
// 是否可被2,3,4,5,6,8,9,10,11整除?{沒有7}
#include <iostream>
using namespace std;
bool isdiv(string s , int k)
{
bool even;
int i,sum[2]={0,0};
int n = s.size();
for(i=0;i<n;++i) sum[i%2] += int(s[i]-'0');
int sum3 = (s[n-1]-'0') + (s[n-2]-'0')*10 + (s[n-3]-'0')*100;
switch ( k )
{
case 2: case 4: case 8: return (sum3%k==0);
case 3: case 9: return ((sum[0]+sum[1])%k==0);
case 5: return (s[n-1]=='5' || s[n-1]=='0' );
case 10: return (s[n-1]=='0');
case 6: return ( sum3%2==0 && (sum[0]+sum[1])%k==0 );
case 11: return (sum[0]==sum[1]|| abs(sum[0]-sum[1])%11==0);
// break;
}
}
int main()
{
string s;
int t ,k;
while(cin >>t)
while(t--)
{
cin >> s >> k;
cout << ( isdiv(s,k) ? "YES" : "NO" ) << endl;
}
system("pause");
return 0;
}
/*
2
514 2
514 3
3
10077696 6
555111444 5
123456654321 11
4
100000000000000000000 5
3112 4
4212 8
3112 8
----------
Yes
No
Yes
No
Yes
Yes
Yes
No
Yes
*/