摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
A + B Problem II ★☆☆☆☆ 答案正确 100 2015-02-06 10:40:45 输出格式(0)

题意

高精度A+B。

题解

  • 这次Presentation Error的原因居然是文末换行……因为一般只自动过滤一个……这种设定sigh
  • 嗯,直接用了高精度模板

代码

1002.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<iostream>
  2. #include<iomanip>
  3. #include<algorithm>
  4. #include<vector>
  5. using namespace std;
  6. class largeInt
  7. {
  8. public:
  9. const int size() const
  10. {
  11. return u.size();
  12. }
  13. largeInt()
  14. {
  15. u.clear();
  16. u.push_back(0);
  17. }
  18. largeInt(const int &number)
  19. {
  20. u.clear();
  21. u.push_back(number);
  22. carry();
  23. }
  24. friend istream& operator >> (istream& os,largeInt &ob)
  25. {
  26. ob.u.clear();
  27. string original;
  28. os>>original;
  29. for(int i=original.size()-1,j=0,p=1;i>=0;--i)
  30. {
  31. j+=(original[i]-'0')*p;
  32. p*=10;
  33. if((!i) || p==10000)
  34. {
  35. ob.u.push_back(j);
  36. j=0;
  37. p=1;
  38. }
  39. }
  40. return os;
  41. }
  42. friend ostream& operator << (ostream& os,const largeInt &ob)
  43. {
  44. os<<setw(0)<<setfill('0')<<ob.u[ob.size()-1];
  45. for(int i=ob.size()-2;i>=0;--i)
  46. os<<setw(4)<<setfill('0')<<ob.u[i];
  47. return os;
  48. }
  49. friend const largeInt operator +(const largeInt &a,const largeInt &b)
  50. {
  51. largeInt r;
  52. r.u.resize(max(a.size(),b.size()));
  53. for(int i=0;i<r.size();++i)
  54. {
  55. if(i<a.size())
  56. r.u[i]+=a.u[i];
  57. if(i<b.size())
  58. r.u[i]+=b.u[i];
  59. }
  60. r.carry();
  61. return r;
  62. }
  63. friend const largeInt operator *(const largeInt &a,const largeInt &b)
  64. {
  65. largeInt r;
  66. r.u.resize(a.size()+b.size());
  67. for(int i=0;i<a.size();++i)
  68. {
  69. for(int j=0;j<b.size();++j)
  70. {
  71. r.u[i+j]+=a.u[i]*b.u[j];
  72. }
  73. }
  74. r.carry();
  75. return r;
  76. }
  77. private:
  78. vector<int> u;
  79. void carry()
  80. {
  81. for(int i=0;i<size();++i)
  82. {
  83. if(u[i]>=10000)
  84. {
  85. if(i==size()-1)
  86. u.push_back(u[i]/10000);
  87. else
  88. u[i+1]+=u[i]/10000;
  89. u[i]%=10000;
  90. }
  91. }
  92. for(int i=size()-1;i!=0;--i)
  93. {
  94. if(u[i]==0)
  95. {
  96. u.pop_back();
  97. }else{
  98. break;
  99. }
  100. }
  101. }
  102. };
  103.  
  104. int main()
  105. {
  106. int t;
  107. largeInt a,b;
  108. cin>>t;
  109. for(int c=1;c<=t;++c)
  110. {
  111. cin>>a>>b;
  112. cout<<"Case "<<c<<":"<<endl;
  113. cout<<a<<" + "<<b<<" = "<<a+b<<endl;
  114. if(c!=t)//fixed:文末换行//
  115. cout<<endl;
  116. }
  117. return 0;
  118. }

著作权声明[编辑]

关于[编辑]