HZNUOJ-1072-数字整除
题解思路
首先,拿到一道题目必须必须关注输入变量的范围!!! 比如1≤n≤10^100!!!所以,这道题每次输入的正整数,如果用数字类型的变量储存,int和long long都会爆!!!那么,我们就要尝试更换思路,对于这类 “大数”问题,通常会把它们看做字符串来储存现在,问题就转化为,如何判断一个字符串表示的正整数能否被17整除,还不能爆int/long long对于这个问题,我们可以准备一个初值为0的变量ans,然后遍历字符串从高位开始,取出字符串的每一位(从左往右)变量ans每次*10,再加上取出的那一位的ASCII码,然后勿忘-48,因为字符0的ASCII码是48然后非常关键的是!!!每取一位累计ans后,都要对17做一次取余,以 防ans爆 int/long long这是因为a%b=c,则 (ad)%b=cd,故多次取余和最后取余,对判断是否能被17整除效果一致最后ans如果为0,则代表原输入可以被17整除,输出1;反之,输出0;还要注意判断输入0即为结束,由于输入的是字符串,所以在while循环内应以put[0]!=48作为条件希望大家通过这道题目,能够初步掌握对大数的处理方法,祝大家AC愉快鸭٩(๑>◡<๑)۶
AC代码
#include<stdio.h>
#include<string.h>
int main()
{
int ans
;
char put
[200];
while(~scanf("%s",&put
)&&put
[0]!=48)
{
if(strlen(put
)==1&&put
[strlen(put
)-1]=='0') break;
ans
=0;
for(int i
=0;i
<strlen(put
);++i
) ans
=(ans
*10+put
[i
]-48)%17;
printf("%d\n",ans
==0?1:0);
}
return 0;
}