题目:
B. Fedya and Maths
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Fedya studies in a gymnasium. Fedya's maths hometask is to calculate the following expression:
for given value of n. Fedya managed to complete the task. Can you? Note that given number n can be extremely large (e.g. it can exceed any integer type of your programming language).
Input
The single line contains a single integer n (0 ≤ n ≤ 10105). The number doesn't contain any leading zeroes.
Output
Print the value of the expression without leading zeros.
Sample test(s)
input
4
output
4
input
124356983594583453458888889
output
0
Note
Operation x mod y means taking remainder after division x by y.
Note to the first sample:
题意:
题意很明显了,就是计算题中式子的值。注意到n的范围,意思差不多就是不管用什么都存不下。10^10^5,Orz。打表观察了下规律
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int n,ans;
while(scanf("%d",&n)!=EOF)
{
ans=pow(1,n)+pow(2,n)+pow(3,n)+pow(4,n);
printf("%d %d\n",ans,ans%5);
}
}
发现其实就是n对4取mod,如果mod为0就为4,否则为0;然后这里用了一个小技巧,求一个高精度数对4取mod,只需要求后两位对4mod就行了,因为100以上都可以整除4的。PS:有个大神说,溢出就相当于%2^32,不是很理解,如果有知道的请私信我,3Q;
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char a[100000+5];
int main()
{
int n;
int ans;
while(~scanf("%s", a))
{
int len = strlen(a);
if(len > 1)
{
ans = (a[len-2]-'0')*10+a[len-1]-'0';
}
else
{
ans = a[len-1]-'0';
}
if(ans%4)
{
printf("0\n");
}
else
{
printf("4\n");
}
}
return 0;
}