HZNUOJ-1072-数字整除题解

    技术2024-06-15  55

    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; }
    Processed: 0.012, SQL: 9