原题链接:数字整除
解题思路:问题关键是要能够接收最大101位的数字,long long 型数值也无法容纳,只能先以字符串形式接收,再转化成按位存储的数字数组进行按位计算。
注意事项:
参考代码:
#include <stdio.h>
#include <string.h>
void fuzhi(char a[102], int b[102], int k);
void jianfa(int b[102], int k);
int chufa(int b[102], int k);
int main()
{
char a[10][102];
int b[10][102] = { 0 }, c[10] = { 0 };//字符数组a接收,b用来转换处理,c用来记录位数
int k;
for (k = 0;k < 10;k++)
{
scanf("%s", a[k]);
if (a[k][0] == '0') break;
}
for (int i = 0; i < k;i++)
{
c[i] = strlen(a[i]);
fuzhi(a[i], b[i], c[i]);
jianfa(b[i], c[i]);
c[i]--;//执行过减法后,数值会减少一位
printf("%d\n", chufa(b[i], c[i]));
}
return 0;
}
void fuzhi(char a[102], int b[102], int k)//将字符数组转为数字数组
{
for (int i = 0;i < k;i++)
b[i] = a[i] - '0';
}
void jianfa(int b[102], int k)//执行规则中的减法操作,最后个位容纳两位数、负数不会影响到后续计算
{
b[k - 2] = b[k - 2] - 5 * b[k - 1];
b[k - 1] = 0;
}
int chufa(int b[102], int k)//执行规则中的除法判断,不会受到某一单元是两位数或者负数的影响
{
int i, temp = 0;
for (i = 0;i < k;i++)//按位计算
{
int e = temp * 10 + b[i];
temp = e % 17;
}
if (temp == 0)
return 1;
else
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复