谁会就冒一冒头吧
解释(看注释就行了):
#include <stdio.h>
#include <string.h>
int main()
{
int last(char* str);//函数说明语句,说明了函数last
char str[10000];//定义了str字符数组,有10000个元素
int temp;//定义了整形的temp
while(scanf("%s",str)!=EOF)//循环输入
{
temp=last(str);//把last返回过来的值赋予temp,现在我们就看last函数
printf("%d\n",temp);//返回的表达式值赋予temp,并打印
}
return 0;//结束
}
int last(char* str)//进入函数
{
int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};//定义了mod[20],并赋予了初值
int length=strlen(str),a[10000],i,c,ret=1;//定义了length,它的值就为str的长度,和a[10000]一万个元素,i,c,ret赋予初值1
if (length==1)//如果length也就是str的长度为1,也就只有一个字符
return mod[str[0]-'0'];//返回mod[str[0]-‘0’] mod也就是一个数组,0就是第一个元素,1的ascii是49,0的ascii是48,也就是返回1
for (i=0;i<length;i++)//循环,i赋予初值0,小于length,i++
a[i]=str[length-1-i]-'0';//把str[length-1-i]-'0' length也就是长度,减去1,再减i,再减去48,赋予a[i]
for (;length;length-=!a[length-1])//继续循环
{
ret=ret*mod[a[1]%2*10+a[0]]%5;//ret就是1,ret乘以mod[a[1]%2*10+a[0]]括号里的表达式好好算算就出来了,带一个值进去
for (c=0,i=length-1;i>=0;i--)//循环
c=c*10+a[i],a[i]=c/5,c%=5;//一样的,带一个值进去就什么都清楚了
}
return ret+ret%2*5;//返回一个值,ret是因上面的表达式变化,这里也说不清楚
}