看了别人的代码,不需要考虑大数int就可以,哭死。。。//阶乘末尾零的个数等于while(n){ sum += n /5;n = n /5;}
//大数除法,加法,还不熟练!!!
#include<stdio.h>
#include<string.h>
int div5(char *a,char *b){
int i,len,car,n,j;
i = 0;
car = 0;
len = strlen(a);
memset(b,0,sizeof(b));
while(i<len){
b[i] = (a[i] - '0' + car) / 5 + '0';
car = (a[i] - '0' + car) % 5 * 10;
i++;
}
i = 0;
while(b[i] == '0') i++;
len = strlen(&b[i]);
if(len == 0) return 0;
else {
n = i;
for(i = n,j = 0;i<n + len;i++,j++)
b[j] = b[i];
b[j] = '\0';
return 1;
}
}
void reverse(char *a){
int i,j;
char t;
for(i = strlen(a) - 1,j = 0;i>j;i--,j++){
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
void add(char*a,char*b){
int i,j;
int c;
char ch;
c = 0;
for(i = 0;i<strlen(b);i++){
ch = (a[i] + b[i] - 2*'0' + c) % 10 + '0';
c = (a[i] + b[i] - 2*'0' + c) / 10;
a[i] = ch;
}
while(c){
if(i>=strlen(a)){
a[i] = c % 10 + '0';
c = c / 10;
}
else{
ch = (a[i] - '0' + c) % 10 + '0';
c = (a[i] - '0' + c) / 10;
a[i] = ch;
}
i++;
}
}
int main()
{
int times,count,carriage,i;
char ch[11];
char result[11];
char str[11];
scanf("%d",×);
while(times--)
{ memset(ch,0,sizeof(ch));
memset(result,0,sizeof(result));
memset(str,0,sizeof(str));
count = 0;
scanf("%s",ch);
div5(ch,result);
strcpy(ch,result);
reverse(result);
while(div5(ch,str)){
strcpy(ch,str);
reverse(str);
add(result,str);
}
reverse(result);
printf("%s\n",result);
}
return 0;
}