首页 > 代码库 > 高精度
高精度
输入的两个数要求为正。
#include<stdio.h> #include<string> #include<string.h> #include<iostream> #include<cmath> using namespace std; int compare(string str1,string str2) { if(str1.length() > str2.length()) return 1; else if(str1.length() < str2.length()) return -1; else return str1.compare(str2); } string add(string str1,string str2)//加法 { string str; int len1 = str1.length(),len2 = str2.length(); if(len1 < len2) { for(int i = 1;i <= len2-len1;i++) str1 = "0"+str1; } else { for(int i = 1;i <= len1-len2;i++) str2 = "0"+str2; } int cf = 0,temp; for(int i = str1.length()-1;i >= 0;i--) { temp = str1[i]-‘0‘+str2[i]-‘0‘+cf; cf = temp/10; temp %= 10; str = char(temp+‘0‘)+str; } if(cf != 0) str = char(cf+‘0‘)+str; return str; } string sub(string str1,string str2)//减法 { string str; int flag = 0; if(compare(str1,str2) < 0) { flag = 1; swap(str1,str2); } int tmp = str1.length()-str2.length(),cf = 0; for(int i = str2.length()-1;i >= 0;i--) { if(str1[tmp+i] < str2[i]+cf) { str = char(str1[tmp+i]-str2[i]-cf+‘0‘+10)+str; cf = 1; } else { str = char(str1[tmp+i]-str2[i]-cf+‘0‘)+str; cf = 0; } } for(int i = tmp-1;i >= 0;i--) { if(str1[i]-cf >= ‘0‘) { str = char(str1[i]-cf)+str; cf = 0; } else { str = char(str1[i]-cf+10)+str; cf = 1; } } str.erase(0,str.find_first_not_of(‘0‘)); if(str.empty()) str = "0"; if(flag) str = "-"+str; return str; } string mul(string str1,string str2)//乘法 { string str; int len1 = str1.length(); int len2 = str2.length(); string tempstr; for(int i = len2-1;i >= 0;i--) { tempstr = ""; int temp = str2[i]-‘0‘,t = 0,cf = 0; if(temp != 0) { for(int j = 1;j <= len2-1-i;j++) tempstr += "0"; for(int j = len1-1;j >= 0;j--) { cf = (temp*(str1[j]-‘0‘)+cf); t = cf%10; cf /= 10; tempstr = char(t+‘0‘)+tempstr; } if(cf != 0) tempstr = char(cf+‘0‘)+tempstr; str=add(str,tempstr); } } str.erase(0,str.find_first_not_of(‘0‘)); if(str.empty()) str = "0"; return str; } void div(string str1,string str2,string "ient,string &residue)//除法取余 { quotient = ""; residue = ""; if(str2 == "0") { quotient = "ERROR"; residue = "ERROR"; return; } if(str1 == "0") { quotient = "0"; residue = "0"; return; } int res = compare(str1,str2); if(res < 0) { quotient = "0"; residue = str1; return; } else { int len1 = str1.length(); int len2 = str2.length(); string tempstr; tempstr.append(str1,0,len2-1); for(int i = len2-1;i < len1;i++) { tempstr = tempstr+str1[i]; tempstr.erase(0,tempstr.find_first_not_of(‘0‘)); if(tempstr.empty()) tempstr = "0"; for(char ch = ‘9‘;ch >= ‘0‘;ch--) { string str,tmp; str = str+ch; tmp = mul(str2,str); if(compare(tmp,tempstr) <= 0) { quotient = quotient+ch; tempstr = sub(tempstr,tmp); break; } } } residue = tempstr; } quotient.erase(0,quotient.find_first_not_of(‘0‘)); if(quotient.empty()) quotient="0"; } int main() { string str1,str2; string str3,str4; while(cin>>str1>>str2) { div(str1,str2,str3,str4); cout<<add(str1,str2)<<‘ ‘<<sub(str1,str2)<<‘ ‘<<mul(str1,str2)<<‘ ‘<<str3<<‘ ‘<<str4<<endl;; } return 0; }
高精度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。