写了个超大数求余的程序, 不过程序感觉很烦琐
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAX 1000
char str[9][MAX+1];
void rollback(char array[],int Len)
{
char temp;
for(int i=0;i<Len/2;i++)
temp=array[i],array[i]=array[Len-i-1],array[Len-i-1]=temp;
}
void calculate(char str[],int i,int sLen2)
{
int j,t=0,m=sLen2;
for(j=0;j<sLen2;++j)
{
str[j]=(str[j]-48)*(i+1)+48;
str[j]+=t;
t=0;
if(str[j]>'9')
{
if(str[j+1]=='\0')
{
str[j+1]=(str[j]-48)/10+48;
str[j]=(str[j]-48)%10+48;
str[j+2]='\0';
m++;
}
else {
t=(str[j]-48)/10;
str[j]=(str[j]-48)%10+48;
}
}
}
rollback(str,m);
}
int main()
{
char str1[MAX],str2[MAX],str3[MAX],temp[MAX];
int sLen1,sLen2,i,flag=0;
gets(str1);gets(str2);
strcpy(str3,str1);
sLen1=strlen(str1);
sLen2=strlen(str2);
if(sLen1<sLen2)
{printf("%s %% %s is %s\n",str3,str2,str1);system("pause");return 0;}
if((sLen1==sLen2)&&strcmp(str1,str2)<0)
{printf("%s %% %s is %s\n",str3,str2,str1);system("pause");return 0;}
int j,Len,m;
strcpy(str[0],str2);
for(i=1;i<9;++i)
{
strcpy(str[i],str2);
rollback(str[i],sLen2);
calculate(str[i],i,sLen2);
}
for(;sLen1>=sLen2;)
{
if((sLen1==sLen2)&&strcmp(str1,str2)<0) break;
for(i=0;i<9;++i)
{
Len=strlen(str[i]);
for(j=0;j<Len;++j)
temp[j]=str1[j];
temp[j]='\0';
if(strcmp(temp,str[i])>=0)
break;
}
if(i==9)
{
for(i=0;strlen(str[i])!=Len;++i);
--i;
for(j=0;j<Len;++j)
temp[j]=str1[j];
temp[j]='\0';
for(m=Len-1;m>0;--m)
str[i][m]=str[i][m-1];
str[i][0]='0';
str[i][Len]='\0';
}
if(strcmp(temp,str[i])==0)
{
sLen1-=Len;
for(j=Len;str1[j]!='\0';++j)
str1[j-Len]=str1[j];
str1[j-Len]='\0';
}
else
{
for(j=Len-1;j>=0;--j)
{
str1[j]=str1[j]-str[i][j]+48;
if(str1[j]<48)
{
str1[j]+=10;
--str1[j-1];
}
}
char *p=str1;
for(;*p=='0';++p,sLen1--);
for(m=0;*p!='\0';++p)
str1[m++]=*p;
str1[m]='\0';
if(*str[i]=='0')
{
for(m=0;m<Len;++m)
str[i][m]=str[i][m+1];
str[i][m]='\0';
}
}
}
if(*str1=='\0') printf("%s %% %s is 0\n",str3,str2);
else printf("%s %% %s is %s\n",str3,str2,str1);
system("pause");
return 0;
}