记录编号 47601 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [東方S1] 西行寺幽幽子 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.200 s
提交时间 2012-11-02 14:43:57 内存使用 2.31 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. using namespace std;
  5. struct bint
  6. {
  7. int len,num[20001];
  8. };
  9. bool bcom(bint a,bint b)
  10. {
  11. int i;
  12. if (a.len>b.len)
  13. {
  14. return(0);
  15. }
  16. else if (a.len<b.len)
  17. {
  18. return(1);
  19. }
  20. else
  21. {
  22. for (i=a.len-1;i>=0;i--)
  23. if (a.num[i]>b.num[i])
  24. {
  25. return(0);
  26. }
  27. else if (a.num[i]<b.num[i])
  28. {
  29. return(1);
  30. }
  31. }
  32. return(0);
  33. }
  34. bint bsub(bint a,bint b)
  35. {
  36. int i;
  37. bool jie=0;
  38. for (i=0;i<a.len;i++)
  39. {
  40. a.num[i]=a.num[i]-b.num[i]-jie;
  41. if (a.num[i]<0)
  42. {
  43. a.num[i]+=10;
  44. jie=1;
  45. }
  46. else
  47. jie=0;
  48. }
  49. for (i=a.len-1;i>=0;i--)
  50. if (a.num[i]!=0)
  51. {
  52. a.len=i+1;
  53. break;
  54. }
  55. if (i==-1)
  56. a.len=0;
  57. return(a);
  58. }
  59. bint bdiv(bint a,bint b)
  60. {
  61. bint c={0};
  62. int i,len;
  63. len=a.len-b.len;
  64. for (i=b.len-1;i>=0;i--)
  65. b.num[i+len]=b.num[i];
  66. for (i=0;i<len;i++)
  67. b.num[i]=0;
  68. b.len=a.len;
  69. while (len!=-1)
  70. {
  71. while (bcom(a,b)==0)
  72. {
  73. c.num[len]++;
  74. a=bsub(a,b);
  75. }
  76. b.len--;
  77. len--;
  78. if (len!=-1)
  79. for (i=len;i<b.len;i++)
  80. b.num[i]=b.num[i+1];
  81. b.num[b.len]=0;
  82. }
  83. for (i=20000;i>=0;i--)
  84. if (c.num[i]!=0)
  85. {
  86. c.len=i+1;
  87. break;
  88. }
  89. if (i==-1)
  90. c.len=0;
  91. return(c);
  92. }
  93. void bprint(bint a)
  94. {
  95. if (a.len==0)
  96. {
  97. printf("0");
  98. return;
  99. }
  100. int i;
  101. for (i=a.len-1;i>=0;i--)
  102. printf("%d",a.num[i]);
  103. }
  104. int main(void)
  105. {
  106. freopen("spring.in","r",stdin);
  107. freopen("spring.out","w",stdout);
  108. bint m={0},n={0},ans={0};
  109. int i;
  110. char str[20005];
  111. scanf("%s\n",&str);
  112. m.len=strlen(str);
  113. for (i=0;i<m.len;i++)
  114. m.num[i]=str[m.len-i-1]-'0';
  115. scanf("%s\n",&str);
  116. n.len=strlen(str);
  117. for (i=0;i<n.len;i++)
  118. n.num[i]=str[n.len-i-1]-'0';
  119. if (bcom(m,n)==0)
  120. ans=bdiv(m,n);
  121. bprint(ans);
  122. printf("\n");
  123. return(0);
  124. }