描述
请用下面方法判断x是不是11的倍数。
把x的个位、百位、万位、……上的数字求和,得s1;
把x的十位、千位、十万位、……上的数字求和,得s2;
如果s1÷11所得的余数=s2÷11所得的余数,那么x就是11的倍数。
例如:x=3162819
s1=3+6+8+9=26
s2=1+2+1=4
因为26÷11余4,4÷11也余4,所以3162819是11的倍数。
输入
第一行,一个正整数n。
以下n行,每行一个正整数xi,需要你判断xi是不是11的倍数。
输出
n行,每行输出一个Yes或No,表示xi是不是11的倍数。
注意:每行的输出只能是Yes或No,注意大小写,不要有多余的其它字符(包括空格)。
输入样例 1
3
2035
62202
335
输出样例 1
Yes
No
No
提示
xi的位数不超过10位
思路
- 读取输入,获取正整数n。
- 使用一个循环,重复n次进行以下操作:
a. 读取一个正整数xi。
b. 将xi转换为字符串形式,以便逐位访问数字。
c. 初始化变量s1和s2为0,用于分别计算个位、百位、万位等数字的和。
d. 使用一个循环遍历xi的每个位数:
如果当前位数的索引是奇数,则将对应的数字加到s1中。
如果当前位数的索引是偶数,则将对应的数字加到s2中。
e. 使用求余运算符得到s1除以11的余数rem1,以及s2除以11的余数rem2。
f. 如果rem1等于rem2,则输出"Yes",否则输出"No"。
3,结束循环。
代码实现
算法1:常规思路
#include<stdio.h>
int main() {
int n;
scanf("%d", &n);
while (n--) {
int x0;
scanf("%d", &x0);
int sum1 = 0, sum2 = 0;
int i = 1;
while (x0) {
if (i % 2 == 1) sum1 += x0 % 10;
else sum2 += x0 % 10;
x0 /= 10;
i++;
}
if (sum1 % 11 == sum2 % 11) printf("Yes\n");
else printf("No\n");
}
return 0;
}
算法2:字符串
#include<stdio.h>
#include<string.h>
int main() {
int n;
scanf("%d", &n);
while (n--) {
char x0[100];
scanf("%s", x0);
int sum1 = 0, sum2 = 0;
int len = strlen(x0);
for (int i = 0; i < len; i += 2) {
sum1 += (x0[i] - '0');
}
for (int i = 1; i < len; i += 2) {
sum2 += (x0[i] - '0');
}
if (sum1 % 11 == sum2 % 11) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}