岚朋友


私信TA

用户名:a475308928

访问量:1606

签 名:

等  级
排  名 78
经  验 9662
参赛次数 0
文章发表 11
年  龄 0
在职情况 学生
学  校 ???
专  业 软件工程

  自我简介:

TA的其他文章

位运算 26行
浏览:59

解题思路:
直接减法模拟即可
注意事项:
记得考虑余数不输出和商不输出的情况,此时输出0
参考代码:

#include<stdio.h>
#include<string.h>
const int N=1e5+5;
char compare(int a[],int b[])//a1 b-1 a==b0
{ if(a[0]>b[0])return 1;
  if(a[0]<b[0])return -1;
  for(int i=a[0];i>0;i--)
  { if(a[i]>b[i])return 1;
    if(b[i]>a[i])return -1;
  }
  return 0;
}
void copyarray(int p[],int q[],int m)
{ for(int i=1;i<=p[0];i++)q[i-1+m]=p[i];
  q[0]=p[0]+m-1;
}
void subtraction(int a[],int b[])
{ int mark=compare(a,b),i;
  if(!mark){a[0]=0;return;}
  if(mark==1)//大于才减
  { for(i=1;i<=a[0];i++)
    { if(a[i]<b[i])a[i+1]--,a[i]+=10;
      a[i]-=b[i];
    }
    while(a[0]>0&&a[a[0]]==0)a[0]--;
  }
}
void division(int a[],int b[],int c[])
{ int i,temp[N];
  c[0]=a[0]-b[0]+1;
  for(i=c[0];i>=1;i--)
  { memset(temp,0,sizeof temp);
    copyarray(b,temp,i);
    while(compare(a,temp)>=0)
    { c[i]++;
      subtraction(a,temp);
    }
  }
  while(c[0]>0&&c[c[0]]==0)c[0]--;
}
main()
{ int a[N],b[N],result[N],i;
  char temp1[N],temp2[N];
  bool mark;
  scanf("%s%s",temp1,temp2);
  a[0]=strlen(temp1),b[0]=strlen(temp2);
  for(i=1;i<=a[0];i++)a[i]=temp1[a[0]-i]-48;
  for(i=1;i<=b[0];i++)b[i]=temp2[b[0]-i]-48;
  division(a,b,result);
  for(mark=1,i=result[0];i>0;i--)printf("%d",result[i]),mark=0;
  if(mark)printf("0");
  for(printf("\n"),i=a[0],mark=1;i>0;i--)printf("%d",a[i]),mark=0;
  if(mark)printf("0");
}

 

0.0分

8 人评分

  评论区

  • «
  • »