1 条题解

  • 0
    @ 2023-7-20 16:37:49

    大的不好推理,我们先从小的开始:

    • 如果n=3n=3,显而易见是1+23=01+2-3=0

    • 如果n=4n=4,显而易见是1+2+34=0-1+2+3-4=0

    • 再加一个55进去,我们可以看到把n=4n=4的情况带进去,变成了:1+234+5=11+2-3-4+5=1。先满足前面n=3n=3的情况,多出来的最少是11

    • 如果n=6n=6,那么最少是11

    • 如果n=7n=7,仍然是11

    顺着这个思路,我们发现,当n%4=0n\%4=0时,最小为00;当n%4=1n\%4=1时,最小为11;当n%4=2n\%4=2时,最小为11;当n%4=3n\%4=3时,最小为00

    不过:题目原文:n<101000n<10^{1000}...要求字符串输入,不过没关系,4的倍数只看最后两位,提出字符串的最后两位转int就行

    然后代码就这么短辣!!!

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    using namespace std;
    
    string n;
    int ans[] = {0,1,1,0};
    //      余0(4),1,2,3(用数组会简单不用写辣么多if
    
    int main()
    {
    	cin >> n;
    	if(n.size() == 1)//如果是一位数,就提不出两位力(
    	{
    		int num = int(n[0] - '0');
    		cout << ans[num % 4];
    		return 0;
    	}
    	int num = int(n[n.size() - 2] - '0') * 10 + int(n[n.size() - 1] - '0');//最后两位
    	cout << ans[num % 4];
    	return 0;
    }
    

    信息

    ID
    100
    时间
    5ms
    内存
    8MiB
    难度
    10
    标签
    递交数
    4
    已通过
    2
    上传者