欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

dxw 525 高精度

时间:2024-05-25 10:20 作者:admin 点击:
//高精度、大整数 加、减、乘、除(只涉及大整数除以小整数) /* 策略1:输入处理,采用字符串【长度不限,可以整体存,单字符操作】 策略2:计算 加法:倒序,转int类型,进行加法,通

//高精度、大整数   加、减、乘、除(只涉及大整数除以小整数)

/*

策略1:输入处理,采用字符串【长度不限,可以整体存,单字符操作】

策略2:计算

   加法:倒序,转int类型,进行加法,通过数字拆分进位,最后得出结果存放

   减法:保证被减数大,倒序,转int类型,进行减法,通过数字拆分借位,最后得出结果存放

   除法:不需要倒序,按位进行整除取余,通过数字拼接继位,最后得出结果存放

策略3:结果处理

   加法:倒序,去除多余的零(前导零)

   减法:加上符号,倒序,去除多余的零(前导零)

   除法:可能计算商和余数

*/

#include <iostream>

#include <algorithm>

using namespace std;

//输入一个长度小于200的大整数,输出它的相反数

string xfs(string s){

   if(s[0]=='-') return s.substr(1,s.size()-1);

   else if(s=="0") return s;

   else return "-"+s;

}

//输入两个长度小于200的大整数,输出它们的和,0000003465070643

string add(string s1,string s2){

   if(s1.size()<s2.size()) swap(s1,s2);

   reverse(s1.begin(),s1.end());

   reverse(s2.begin(),s2.end());

   string ans="";

   int n=0,jw=0;

   for(int i=0;i<s1.size();i++){

      n=s1[i]-48+jw;

      if(i<s2.size()) n+=s2[i]-48;

      jw=n/10;

      ans+=to_string(n%10);

   }

   if(jw) ans+=to_string(jw);

   int i=ans.size()-1;

   while(ans[i]=='0'&&i!=0) i--;

   ans=ans.substr(0,i+1);

   reverse(ans.begin(),ans.end());

   return ans;

}

//输入两个长度小于200的大整数,输出它们的差

string sub(string s1,string s2){

   string sign="";

   if(s1.size()<s2.size()||s1.size()==s2.size()&&s1<s2){

       swap(s1,s2);

       sign="-";

   }

   reverse(s1.begin(),s1.end());

   reverse(s2.begin(),s2.end());

   string ans="";

   int n=0;

   for(int i=0;i<s1.size();i++){

       n=s1[i]-48;

       if(i<s2.size()) n-=s2[i]-48;

       if(n<0){

           n+=10;

           s1[i+1]--;

       }

       ans+=to_string(n);

   }

   int i=ans.size()-1;

   while(ans[i]=='0'&&i!=0) i--;

   ans=ans.substr(0,i+1);

   reverse(ans.begin(),ans.end());

   return sign+ans;

}

//除法:高精度除以低精

struct Ans{

   string shang;

   int ys;

};

Ans dev(string s,int a){

   int ys=0;

   string ans="";

   for(int i=0;i<s.size();i++){

       ys=ys*10+s[i]-48;

       if(ys<a) ans+="0";

       else {

           ans+=to_string(ys/a);

           ys%=a;

       }

   }

   int i=0;

   while(ans[i]=='0'&&i!=ans.size()-1) i++;

   ans=ans.substr(i);

   Ans p={ans,ys};

   return p;

}

int main(){

   string s="1234567";

   int a=7;

   Ans p=dev(s,a);

   cout<<p.shang<<" "<<p.ys;

   return 0;

}

(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%