C++ 中檢查大數是否能被 13 整除


在這裡,我們將瞭解如何檢查一個數是否能被 13 整除。在這種情況下,數字非常大。因此,我們將數字作為字串輸入。

如果數字滿足以下情況,則該數字可以被 13 整除:

  • 當且僅當我們得到交替和(即從右到左交替加減三位數的塊)可以被 13 整除時,一個數才能被 13 整除。例如,2911285 可以被 13 整除,因為大小為 3 的塊的交替和為 2 – 911 + 285 = -650,該和可以被 13 整除。
  • 當且僅當該數是由將最後一位數字乘以 4 加到其餘數字所形成的數也可以被 13 整除時,該數才能被 13 整除。例如,考慮 2353。應用上述規則,我們得到 235 + 3*4 = 247。在下一次迭代中,24 + 7*4 = 52。由於 52 可以被 13 整除,因此給定數字可以被 13 整除。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
bool isDiv13(string num){
   int length = num.size();
   if (length == 1 && num[0] == '0')
      return true;
   if (length % 3 == 1) { //when length is not divisible by 3, remainder is 1
      num +="00";
      length += 2;
   } else if (length % 3 == 2){ //when length is not divisible by 3, remainder is 2
      num += "0";
      length += 1;
   }
   int sum = 0, p = 1;
   for (int i = length - 1; i >= 0; i--) {
      int set = 0;
      set += (num[i--] - '0');
      set += (num[i--] - '0') * 10;
      set += (num[i] - '0') * 100;
      sum = sum + set * p;
      p *= (-1);
   }
   sum = abs(sum);
   return (sum % 13 == 0);
}
int main() {
   string num = "83959092724";
   if(isDiv13(num)){
      cout << "Divisible";
   } else {
      cout << "Not Divisible";
   }
}

輸出

Divisible

更新於: 2019年10月22日

287 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.