日记
2024.4.14
洛谷B2074 计算星期几
void f(int *num,int power,int *ans){
*num=*num%7;
for(int i=1;i<=power;i++){
(*ans)*=(*num);
(*ans)%=7;
}
}
int main(){
int num=0,power=0,ans=1;
scanf("%d%d",&num,&power);
f(&num,power,&ans);
if(ans==0||ans==7) printf("Sunday");
else if(ans==1) printf("Monday");
else if(ans==2) printf("Tuesday");
else if(ans==3) printf("Wednesday");
else if(ans==4) printf("Thursday");
else if(ans==5) printf("Friday");
else if(ans==6) printf("Saturday");
return 0;
}
其上代码中,对于一个极大的幂函数,采用循环进行解决,找到规律,然后运用规律不断抵消次数,最终可得出答案
类似地,我们看下面这题B2075 幂的末尾:
include<stdio.h>
void f(int num,int power,int ans){
for(int i=0;i<power;i++){
(ans)=num;
(ans)%=1000;
}
}
int main(){
int num=0,power=0,ans=1;
scanf("%d%d",&num,&power);
f(num,power,&ans);
if(ans<10) printf("00%d",ans);
else if(ans<100) printf("0%d",ans);
else if(ans<1000) printf("%d",ans);
return 0;
}
这题也是面对一个极大的幂函数求结果,采用循环的方式,每次乘一次变量,再把所求的末三位留下来,这样就省去了很大的不必要的空间,进而算出答案