方法1:直接从个位数开始mod 11计算。
- /*0.026s*/
- #include<cstdio>
- #include<cstring>
- char s[1005];
- int main(void)
- {
- int remainder;
- while (gets(s), strcmp(s, "0"))
- {
- remainder = 0;
- for (int i = 0; s[i]; i++)
- remainder = (remainder * 10 + (s[i] & 15)) % 11;
- if (remainder) printf("%s is not a multiple of 11.\n", s);
- else printf("%s is a multiple of 11.\n", s);
- }
- return 0;
- }
方法2:若一个整数的奇位数字之和与偶位数字之和的差能被11整除,则这个数能被11整除。
证明:比如num = 10000a4+1000a3+100a2+10a1+a0=(a4+a2+a0-a3-a1)+(9999a4+99a2+1001a3+11a1)
因为11 | 99,所以11 | (9900+99)
因为11 | 1111,所以11 | (1111-110)
所以...
- /*0.025s*/
- #include<cstdio>
- #include<cstring>
- char s[1005];
- int main(void)
- {
- int l, i, sum;
- while (gets(s), strcmp(s, "0"))
- {
- l = strlen(s), sum = 0;
- for (i = 0; i < l; i += 2) sum += s[i] & 15;
- for (i = 1; i < l; i += 2) sum -= s[i] & 15;
- if (sum % 11) printf("%s is not a multiple of 11.\n", s);
- else printf("%s is a multiple of 11.\n", s);
- }
- return 0;
- }