NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2015國中組初賽
 NPSC2015國中組初賽 F.頗旺愛數樹

作者 主題: NPSC2015國中組初賽 F.頗旺愛數樹  (閱讀 859 次)

rscpp

  • 中級會員
  • ***
  • 文章數: 60
    • 檢視個人資料
NPSC2015國中組初賽 F.頗旺愛數樹
« 於: 十二月 10, 2015, 12:10:13 am »

我的想法是 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
*/
« 上次編輯: 十二月 11, 2015, 05:02:59 pm 由 rscpp »
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2015國中組初賽
 NPSC2015國中組初賽 F.頗旺愛數樹