2 条题解
-
0
累死
#include <iostream> #include <string> #include <algorithm> using namespace std; string jia(string sa,string sb){ int a[114514]={},b[114514]={},c[228228]={}; reverse(sa.begin(),sa.end()); reverse(sb.begin(),sb.end()); for(int i = 0;i<sa.size();i++)a[i]=sa[i]-'0'; for(int i = 0;i<sb.size();i++)b[i]=sb[i]-'0'; int len=max(sa.size(),sb.size()); for(int i = 0;i<sa.size();i++){ c[i]+=a[i]+b[i]; c[i+1]+=c[i]/10; c[i]%=10; } string ans=""; if(c[len])len++; while(c[len]==0&&len>0)len--; for(int i = 0;i<=len;i++)ans+=(c[i]+'0'); reverse(ans.begin(),ans.end()); return ans; } string sub(string sa, string sb) { int a[999]={},b[999]={},c[999]={}; if(sa.size()<sb.size()||sa.size()==sb.size()&&sa<sb){ swap(sa,sb); cout<<'-'; } reverse(sa.begin(),sa.end()); reverse(sb.begin(),sb.end()); for(int i = 0;i<sa.size();i++)a[i]=sa[i]-'0'; for(int i = 0;i<sb.size();i++)b[i]=sb[i]-'0'; int len=max(sa.size(),sb.size()); for(int i = 0;i<len;i++){ c[i]+=a[i]-b[i]; if(c[i]<0){ c[i+1]-=1; c[i]+=10; } } while(c[len]==0&&len>=1)len--; string ans=""; for(int i = len;i>=0;i--)ans+=c[i]+'0'; return ans; } string add(string sa,string sb){ int a[114514]={},b[114514]={},c[228228]={}; reverse(sa.begin(),sa.end()); reverse(sb.begin(),sb.end()); for(int i = 0;i<sa.size();i++)a[i]=sa[i]-'0'; for(int i = 0;i<sb.size();i++)b[i]=sb[i]-'0'; int len=sa.size()+sb.size(); for(int i = 0;i<sa.size();i++){ for(int j = 0;j<sb.size();j++){ c[i+j]+=a[i]*b[j]; c[i+j+1]+=c[i+j]/10; c[i+j]%=10; } } string ans=""; if(c[len])len++; while(c[len]==0&&len>0)len--; for(int i = 0;i<=len;i++)ans+=(c[i]+'0'); reverse(ans.begin(),ans.end()); return ans; } int delPreZero(int x[], int xLen){ int i=xLen; while(x[i-1]==0 && i>1){ i--; } return i; } void printArr(int x[], int xLen){ for(int i=xLen-1; i>=0; i--){ cout << x[i]; } cout << endl; } bool compare(int x[], int y[], int xLen, int yLen){ if(xLen < yLen){ return false; } if(xLen == yLen){ for(int i=xLen-1; i>=0; i--){ if(x[i] > y[i]){ return true; } if(x[i] < y[i]){ return false; } } return true; } return true; } int sub(int x[], int y[], int z[], int xLen, int yLen){ int zLoc = xLen - yLen ; for(int i=1; i<=yLen; i++){ if(x[xLen-i] > y[yLen-i]) break; if(x[xLen-i] < y[yLen-i]){ zLoc--; break; } } if(zLoc<0) return xLen; for(int i=zLoc,j=0; i<xLen && j<yLen; i++,j++){ while(x[i] < y[j]){ x[i+1]--; x[i] += 10; } x[i] -= y[j]; } z[zLoc]++; while(x[xLen-1]==0) xLen--; if(xLen <= 0) xLen = 1; return xLen; } int main() { string num1, num2; cin >> num1 >> num2; string suma = jia(num1, num2); string sumb = sub(num1,num2); string sumc = add(num1,num2); cout << suma << endl; cout << sumb << endl; cout <<sumc<<endl; int a[301]={0}, b[301]={0}, c[301]={0}; int aLen = 0, bLen = 0, cLen = 1, maxLen = 0; int i; aLen = num1.size(); bLen = num2.size(); for(i=0; i<aLen; i++){ a[i] = num1[aLen-1-i] - '0'; } for(i=0; i<bLen; i++){ b[i] = num2[bLen-1-i] - '0'; } aLen = delPreZero(a, aLen); bLen = delPreZero(b, bLen); cLen = aLen - bLen + 1; while(compare(a, b, aLen, bLen)){ aLen = sub(a, b, c, aLen, bLen); } if(cLen < 1){ cLen = 1; } cLen = delPreZero(c, cLen); printArr(c, cLen); return 0; }
- 1
信息
- ID
- 3356
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 24
- 已通过
- 7
- 上传者