博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高精度(加、减、乘、除)
阅读量:6875 次
发布时间:2019-06-26

本文共 3378 字,大约阅读时间需要 11 分钟。

 在位数很大到超过long long的大小的时候需要使用高精度,即使用数组存储数,并模拟数的运算和进位。当然会java,python的可以学一学它自带的函数,十分方便。

 附上加减乘除的代码:

1 #include
2 #include
3 using namespace std; 4 5 int compare(string str1,string str2){ 6 int len1=str1.length(),len2=str2.length(); 7 if(len1
len2) 10 return 1; 11 else 12 return str1.compare(str2); 13 } 14 15 //高精度加法,只能是两个正数相加 16 string add(string str1,string str2){ 17 string str; 18 int len1=str1.length(),len2=str2.length(); 19 if(len1
=0;i--){ 28 tmp=str1[i]-'0'+str2[i]-'0'+cf; 29 cf=tmp/10; 30 tmp%=10; 31 str=char(tmp+'0')+str; 32 } 33 if(cf) 34 str="1"+str; 35 return str; 36 } 37 38 //高精度减法,只能是两个正数相减,而且要大减小 39 string sub(string str1,string str2){ 40 string str; 41 int len1=str1.length(),len2=str2.length(); 42 for(int i=1;i<=len1-len2;i++) 43 str2="0"+str2; 44 int cf=0; 45 for(int i=len1-1;i>=0;i--){ 46 if(str1[i]-cf>=str2[i]){ 47 str=char(str1[i]-cf-str2[i]+'0')+str; 48 cf=0; 49 } 50 else{ 51 str=char(str1[i]-cf-str2[i]+10+'0')+str; 52 cf=1; 53 } 54 } 55 str.erase(0,str.find_first_not_of('0')); 56 if(str.empty()) 57 str="0"; 58 return str; 59 } 60 //高精度乘法,只能是两个正数相乘 61 string mul(string str1,string str2){ 62 string str; 63 int len1=str1.length(),len2=str2.length(); 64 for(int i=len2-1;i>=0;i--){ 65 string tmpstr; 66 int tmp=str2[i]-'0',cf=0,t; 67 if(tmp){ 68 for(int j=1;j<=len2-1-i;j++) 69 tmpstr+="0"; 70 for(int j=len1-1;j>=0;j--){ 71 t=(tmp*(str1[j]-'0')+cf)%10; 72 cf=(tmp*(str1[j]-'0')+cf)/10; 73 tmpstr=char(t+'0')+tmpstr; 74 } 75 if(cf) 76 tmpstr=char(cf+'0')+tmpstr; 77 } 78 str=add(str,tmpstr); 79 } 80 str.erase(0,str.find_first_not_of('0')); //删除前面多余的0,因为如果是0×10,结果将会是00 81 if(str.empty()) 82 str="0"; 83 return str; 84 } 85 //高精度除法,只能是两个正数相除 86 void div(string str1,string str2,string& con,string &rem){ 87 if(str2=="0") 88 return; 89 else if(str1=="0"){ 90 con="0",rem="0"; 91 return; 92 } 93 else if(compare(str1,str2)<0){ 94 con="0",rem=str1; 95 return; 96 } 97 else if(compare(str1,str2)==0){ 98 con="1",rem="0"; 99 return;100 }101 else{102 int len1=str1.length(),len2=str2.length();103 string tmpstr;104 for(int i=0;i
='0';j--){112 string str,tmp;113 str=str+j;114 tmp=mul(str,str2);115 if(compare(tmp,tmpstr)<=0){116 con=con+j;117 tmpstr=sub(tmpstr,tmp);118 break;119 }120 }121 }122 rem=tmpstr;123 }124 con.erase(0,con.find_first_not_of('0'));125 if(con.empty())126 con="0";127 } 128 129 int main(){130 string str1,str2,con,rem;131 cin>>str1>>str2;132 div(str1,str2,con,rem);133 cout<
<
<
<

 

转载于:https://www.cnblogs.com/FrankChen831X/p/10340221.html

你可能感兴趣的文章
python之virtualenv
查看>>
sql效率
查看>>
Python绘图和数值工具:matplotlib 和 numpy下载与使用
查看>>
php - 从数据库导出百万级数据(CSV文件)
查看>>
安卓开发自定义View的框架学习
查看>>
spark-groupByKey
查看>>
redis 随笔
查看>>
LOJ#2302 整数
查看>>
常见的加密解密算法
查看>>
sublime 生成网页头文件
查看>>
Firefly开源主板登陆百度AI市场
查看>>
CoreAnimation 之CAReplicatorLayer
查看>>
场景法设计测试用例
查看>>
使用springmvc中出现406错误
查看>>
MonkeyRunner Android自动化测试
查看>>
在iOS和Android平台下,jQ.Mobi的性能都要优于其余
查看>>
element-ui 实现table整列的拖动
查看>>
ZendFramework 两种安装方式
查看>>
Linux服务器连接不上的几种解决办法
查看>>
NiFi汉化
查看>>