传送门:SDUT 3260
题目大意:
给你两个最多 1000 位的十进制数,问它们是否相等并且是 11 的倍数。
思路:
方法1:用 java 或 python 的大数来一发。
方法2:
利用数字倍数的特征,如果一个数是11 的倍数,则其奇数位数之和与偶数位数之和的差能被11整除。
顺便给大家附上之前整理的其他数字倍数的特征:
3的倍数的特征:各位数相加是3的倍数
9的倍数的特征:各位数相加是9的倍数
7的倍数的特征:若一个整数的个位数字截去,再从余下的数中,减去个位数的2倍,如果差是7的倍数,则原数能被7整除。如果差太大或心算不易看出是否7的倍数,就需要继续上述「截尾、倍大、相减、验差」的过程,直到能清楚判断为止。例如判断6139是否7的倍数的过程如下:613-9×2=595 , 59-5×2=49,所以6139是7的倍数
11的倍数的特征:奇数位数之和与偶数位数之和的差能被11整除则是11的倍数
4的倍数的特征:一个数的末两位数是4的倍数,那么这个数就是4的倍数
8的倍数的特征:一个数的末三位数是8的倍数,那么这个数就是8的倍数
代码:
#include<stdio.h> #include<string.h> int main() { int i,t,n,m,f,len; char a[1010],b[1010]; scanf("%d",&t); while(t--) { scanf("%s%s",a,b); f=1; if(strcmp(a,b)!=0) f=0; //判断两个数是否相等 len=strlen(a); n=m=0; for(i=0;i<len;i++) if(i%2) n+=a[i]-'0'; //奇数位之和 else m+=a[i]-'0'; //偶数位之和 if((n-m)%11!=0) f=0; //判断是否是11的倍数 if(f) printf("YES\n"); else printf("NO\n"); } return 0; }