1 solutions
-
0
C++ :
#include<bits/stdc++.h> using namespace std; //a ,b都是正数 string f1(string a,string b){ string r=""; int k=0; //考虑a与b相同 if(a==b) return "0"; //两数相减,将较大的数放上面 if(a.size()<b.size()) { swap(a,b); k = 1; }else if(a.size()==b.size() && a<b){ swap(a,b); k = 1; } //给较小的数补充前置0 123 - 1 => 123 - 001 while(b.size()!=a.size()) b = '0' + b; int i,f=0,x,y,n=a.size(); //从后往前逐位相减 for(i=n-1;i>=0;i--) { x = a[i]-'0'; y = b[i]-'0'; if(x-f>=y) { r = char(x-f-y+'0') + r; f = 0; //借位 }else{ r = char(x-f-y+10+'0') + r; f = 1; } } //删除前置0 while(r[0]=='0') r.erase(0,1); if(k==1) r = '-'+r; return r; } //实现两数相加 string f2(string a,string b){ string r=""; if(a.size()<b.size()) swap(a,b); while(b.size()!=a.size()) b = '0' + b; int i,x,y,n=a.size(),f=0; for(i=n-1;i>=0;i--) { x = a[i]-'0'; y = b[i]-'0'; r = char((x+y+f)%10+'0') + r; //是否会有新的进位 f=1进位 f=0无进位 f = (x+y+f)/10; } if(f==1) r = '1' + r; return r; } int main(){ string a,b,t,at,bt,r=""; cin>>a>>b; if(a[0]!='-' && b[0]!='-'){ //正 正 r = f1(a,b); }else if(a[0]=='-' && b[0]!='-'){ //负 正 t = ""; for(int i=1;i<a.size();i++) t = t + a[i]; r ="-"+f2(t,b); }else if(a[0]!='-' && b[0]=='-'){ //正 负 t = ""; for(int i=1;i<b.size();i++) t = t + b[i]; r = f2(a,t); }else{ //负 负 //at 接收a字符串对应的正数 //bt 接收b字符串对应的正数 at = ""; bt = ""; for(int i=1;i<a.size();i++) at = at + a[i]; for(int i=1;i<b.size();i++) bt = bt + b[i]; r = f1(bt,at); } int c = 0; string str = ""; //从后往前 for(int i=r.size()-1;i>=0;i--) { str = r[i] + str; c++; if(c%3==0 && i!=0 && (i>0 && r[i-1]!='-')){ str = ',' + str; } } cout<<str; return 0; }
- 1
Information
- ID
- 9989
- Time
- 1000ms
- Memory
- 16MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By