|

楼主 |
发表于 2023-7-22 22:10:34
|
显示全部楼层
@@zhangjinxuan 你觉得我的加减部分效率如何?
- inline int gjd_cmp(string a,string b)//a>b:return 1 a==b:return 0 a<b:return -1
- {//比较大小,不解释
- string num1(a),num2(b);
- while(num1[0]=='0' and num1.length()-1)
- {
- num1.erase(0,1);
- }
- while(num2[0]=='0' and num2.length()-1)
- {
- num2.erase(0,1);
- }
- if(num1.length()<num2.length())
- {
- return -1;
- }
- if(num1.length()>num2.length())
- {
- return 1;
- }
- for(int i=0,l=num1.length();i<l;i++)
- {
- if(num1[i]>num2[i])
- {
- return 1;
- }
- if(num1[i]<num2[i])
- {
- return -1;
- }
- }
- return 0;
- }
- inline string gjd_add(string a,string b)
- {
- int sum=0;
- string ans,num1(a),num2(b);
- if(num1.length()>num2.length())//补全位数
- {
- num2.insert(0,num1.length()-num2.length(),'0');
- }
- else
- {
- num1.insert(0,num2.length()-num1.length(),'0');
- }
- for(int i=num1.length()-1;i>=0;i--)
- {
- sum+=num1[i]+num2[i]-2*'0';
- ans.insert(0,1,sum%10+'0');//进位
- sum/=10;
- }
- if(sum)ans.insert(0,1,sum+'0');
- return ans;
- }
- inline string gjd_sub(string a,string b)//有去除前导零
- {
- int jw=0,op=0;
- string num1,num2,ans;//num1>num2
- if(gjd_cmp(a,b)>=0)num1=a,num2=b;
- else num1=b,num2=a,op=1;//num2 为减数,num1 为被减数
- num2.insert(0,num1.length()-num2.length(),'0');
- for(int i=num1.length()-1;i>=0;i--)
- {
- if(num1[i]<num2[i]+jw)
- {
- ans.insert(0,1,num1[i]+10-num2[i]-jw+'0');
- jw=1;
- }
- else
- {
- ans.insert(0,1,num1[i]-num2[i]-jw+'0');
- jw=0;
- }
- }
- for(int i=0;i<ans.length();i++)
- {
- if(ans[i]!='0')
- {
- ans.erase(0,i);
- break;
- }
- }
- if(ans[0]=='0')ans="0";
- if(op)ans.insert(0,1,'-');
- return ans;
- }
复制代码
|
|