博客
关于我
标程_高精度运算
阅读量:332 次
发布时间:2019-03-04

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

标程_高精度运算

高精加高精

#include
#include
#include
#include
using namespace std;string s1,s2;int a[1010],b[1010],c[1010],len1,len2,alen,blen,clen,llen,s;void in_(){ int i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>s1; cin>>s2; len1=s1.size(); len2=s2.size(); llen=max(len1,len2); for(i=llen,j=len1-1;j>=0;i--,j--) { a[i]=s1[j]-'0'; } for(i=llen,j=len2-1;j>=0;i--,j--) { b[i]=s2[j]-'0'; } return;}void plus_(){ int i; s=0; for(i=llen;i>=1;i--) { c[i]=a[i]+b[i]+s; s=c[i]/10; c[i]=c[i]%10; } c[0]=s; return;}void out_(){ int i; if (s>0) printf("%d",s); for(i=1;i<=llen;i++) printf("%d",c[i]); return;}int main(){ in_(); plus_(); out_(); return 0; }

高精减高精

#include
#include
#include
#include
using namespace std;char s1[1000],s2[1000];bool t;long long a[1010],b[1010],c[1010],len1,len2,n;void in_(){ int i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",&s1); scanf("%s",&s2); len1=strlen(s1); len2=strlen(s2); for(i=1001-len1;i<=1000;i++) a[i]=s1[i+len1-1001]-'0'; for(i=1001-len2;i<=1000;i++) b[i]=s2[i+len2-1001]-'0'; return;}bool bj(){ if (len1
=1;i--) { if (a[i]

高精乘单精

#include
#include
#include
#include
using namespace std;string s;long long a[1010],b,c[1010],len,w;void in_(){ int i,j; memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); cin>>s; cin>>b; len=s.size(); for(i=len;i>0;i--) { a[i]=s[i-1]-'0'; } return;}void plus_(){ int i; w=0; for(i=len;i>=1;i--) { c[i]=a[i]*b+w; w=c[i]/10; c[i]=c[i]%10; } c[0]=w; return;}void out_(){ int i; if (w>0) printf("%d",w); for(i=1;c[i]==0&&i<=len;i++); if (i>len) { printf("0"); return; } for(;i<=len;i++) printf("%d",c[i]); return;}int main(){ in_(); plus_(); out_(); return 0; }

高精乘高精

#include
#include
#include
#include
using namespace std;char s1[1010],s2[1010];long long a[1010],b[1010],c[1010],len1,len2,llen,w;void in_(){ int i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",&s1); scanf("%s",&s2); len1=strlen(s1); len2=strlen(s2); llen=max(len1,len2); for(i=1,j=len1-1;j>=0;i++,j--) { a[i]=s1[j]-'0'; } for(i=1,j=len2-1;j>=0;i++,j--) { b[i]=s2[j]-'0'; } return;}void cheng_(){ int i,j; for(i=1;i<=len1;i++) { for(j=1;j<=len2;j++) { c[i+j-1]+=a[i]*b[j]; c[i+j]+=c[i+j-1]/10; c[i+j-1]=c[i+j-1]%10; } } return;}void out_(){ int i; for(i=1000;c[i]==0&&i>=1;i--); if (i==0) { printf("0"); return; } for(;i>=1;i--) printf("%lld",c[i]); return;}int main(){ in_(); cheng_(); out_(); return 0; }

高精除单精

#include
#include
#include
#include
using namespace std;char s[1010];long long a[1010],c[1010],b,len,g;void in_(){ int i,j; memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); scanf("%s",&s); scanf("%lld",&b); len=strlen(s); for(i=len;i>0;i--) { a[i]=s[i-1]-'0'; } return;}void chu_(){ int i; g=0; for(i=1;i<=len;i++) { c[i]=(g*10+a[i])/b; g=(g*10+a[i])%b; } return;}void out_(){ int i; for(i=1;c[i]==0&&i<=len;i++); if (i>len) printf("0"); else { for(;i<=len;i++) printf("%lld",c[i]); } printf("...%lld",g); return;}int main(){ in_(); chu_(); out_(); return 0; }

高精除高精_减

#include
#include
#include
#include
using namespace std;char s1[1010],s2[1010];long long a[1010],b[1010],c[1010],len1,len2,llen;void in_(){ int i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(a)); memset(c,0,sizeof(c)); scanf("%s",&s1); scanf("%s",&s2); len1=strlen(s1); len2=strlen(s2); llen=max(len1,len2); for(i=llen,j=len1-1;j>=0;i--,j--) { a[i]=s1[j]-'0'; } for(i=llen,j=len2-1;j>=0;i--,j--) { b[i]=s2[j]-'0'; } return;}bool cmp(){ int i,l1,l2; for(i=1;a[i]==0;i++); l1=llen-i+1; for(i=1;b[i]==0;i++); l2=llen-i+1; if (l1
l2) return 1; for(i=l1;i<=llen;i++) { if (a[i]>b[i]) return 1; if (a[i]
=10;i--) { c[i-1]++; c[i]=c[i]%10; } return;} void sub(){ int i; for(i=llen;i>=1;i--) { if (a[i]
llen) printf("0"); else { for(;i<=llen;i++) printf("%lld",c[i]); } printf("..."); for(i=1;a[i]==0&&i<=llen;i++); if (i>llen) printf("0"); else { for(;i<=llen;i++) printf("%lld",a[i]); } return;}int main(){ in_(); while(cmp()) { sub(); add(); } out_(); return 0; }

高精除高精_移减

#include
#include
#include
#include
using namespace std;char s1[1010],s2[1010];long long a[1010],b[1010],c[1010],len1,len2,llen,w,ww;void input(){ int i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",&s1); scanf("%s",&s2); len1=strlen(s1); len2=strlen(s2); llen=max(len1,len2); for(i=llen,j=len1-1;j>=0;i--,j--) { a[i]=s1[j]-'0'; } for(i=llen,j=len2-1;j>=0;i--,j--) { b[i]=s2[j]-'0'; } return;}bool cmp(){ int i,l1,l2; for(i=0;a[i]==0&&i<=llen;i++); l1=llen-i+1; for(i=0;b[i]==0&&i<=llen;i++); l2=llen-i+1; if (l1
l2) return 1; for(i=l1;i<=llen;i++) { if (a[i]>b[i]) return 1; if (a[i]
t;i--) { b[i]=b[i-1]; } b[t]=0; ww++; w--; return;}void add(){ c[w]++; return;} void sub(){ int i; for(i=llen;i>=1;i--) { if (a[i]
=0;i--); for(;i>=0;i--) printf("%lld",c[i]); printf("..."); for(i=1;a[i]==0&&i<=llen;i++); if (i>llen) printf("0"); else { for(;i<=llen;i++) printf("%lld",a[i]); } return;}int main(){ int i; input(); if (!(cmp())) { printf("0..."); for(i=1;a[i]==0&&i<=llen;i++); if (i>llen) printf("0"); else { for(;i<=llen;i++) printf("%lld",a[i]); } return 0; } ww=llen; w=0; while(cmp()) { ywl(); } ywr(); while(w>=0) { while(cmp()) { sub(); add(); } ywr(); } output(); return 0; }

转载地址:http://wmze.baihongyu.com/

你可能感兴趣的文章
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
查看>>
云计算之路-阿里云上:奇怪的CPU 100%问题
查看>>
云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
查看>>
上周热点回顾(6.9-6.15)
查看>>
上周热点回顾(6.16-6.22)
查看>>
上周热点回顾(6.23-6.29)
查看>>
上周热点回顾(10.20-10.26)
查看>>
上周热点回顾(2.16-2.22)
查看>>
上周热点回顾(3.2-3.8)
查看>>
[网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
查看>>
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
查看>>
上周热点回顾(7.27-8.2)
查看>>
上周热点回顾(9.28-10.4)
查看>>
上周热点回顾(3.28-4.3)
查看>>
上周热点回顾(5.2-5.8)
查看>>
上周热点回顾(5.9-5.15)
查看>>
上周热点回顾(8.8-8.14)
查看>>
.NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
查看>>
上周热点回顾(1.16-1.22)
查看>>
上周热点回顾(1.23-1.29)
查看>>