ACM高精度运算

#include
#include
char c[2000];//全局变量,存储大数运算的结果
char arr[1000];//高精度除以高精度的余数
long z=0;//高精度除以低精度的余数
int Judge(char ch[])
{//判断字符串ch是否全为,若全为,返回,否则返回

     int i,k;

     k=strlen(ch);

     for(i=0;ilenb) return 1;

     else {

         if(strcmp(a,b)==0) return 0;

         else{ for(i=0;ib[i]) return 1; if(a[i]lenb?lena:lenb;//当数组除了加数和被加数以外的整型数组元素均为时,无需考虑lena和lenb的大小

     for(i=0;i=0) {//若被减数大于等于减数

         for(i=0;ilenb?lena:lenb;

     for(i=0;i9)

     {//若最后一个元素大于

         a[i]=a[i-1]/10;  a[i-1]=a[i-1]%10;  i++;

     }

     //将得到的整型数组逆置赋给字符串

     for(j=0;j0;i--)  { BigNumFact(i);  strcpy(d,c);  memset(c,0,sizeof(c));  BigNumberAdd(d,sum); strcpy(sum,c);

 memset(c,0,sizeof(c)); }

     strcpy(c,sum);//将结果赋值给全局变量,进行输出

}

 

//高精度的乘方,幂数为整型常量

void BigNumInvol(char a1[],int b1)
{  int i;

     char temp[1000];

   strcpy(temp,a1);//注意乘方是自己乘自己,而不是结果乘结果

  for(i=2;i=0) {BigNumberSub(b,b1);strcpy(b,c);memset(c,0,sizeof(c));time[lentime]++;flag=1;//控制time的元素的位置

              }

              if(flag)//将商转换为字符

                   time[lentime]+='0';

              else//当被除数前几位小于除数,商补

                   time[lentime]='0';

              if(!strcmp(b,"0"))//若b为‘’

                   j=0;

              else//继续在b的后面加值

                   j=strlen(b);

              lentime++; }

         k=0;

         for(i=0;i

你可能感兴趣的:(ACM程序设计)