博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大整数运算||高精度运算
阅读量:6435 次
发布时间:2019-06-23

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

codevs 3116 高精加法:

#include
#include
#include
using namespace std;int a[300],b[300],c[300],j=1;char x[300],y[300];int main(){ cin>>x>>y; a[0]=strlen(x); b[0]=strlen(y); for(int i=1;i<=a[0];i++) a[i]=x[a[0]-i]-'0'; for(int i=1;i<=b[0];i++) b[i]=y[b[0]-i]-'0';// 以上為輸入數據。 do{ c[j]=a[j]+b[j]+c[j]; if(c[j]>=10) {c[j]=c[j]%10;c[j+1]++;} j++; a[0]--; b[0]--; }while(a[0]>0||b[0]>0);// 以上為高精加法。 while(!c[j]) j--; while(j) {cout<
View Code 

codevs 3115 高精減法:

#include
#include
#include
#include
using namespace std;char s1[666],s2[666];int a[666],b[666],c[666],al,bl,cl,pan=0;int main(){ cin>>s1>>s2; al=strlen(s1); bl=strlen(s2); if(al>bl||(al==bl&&s1[0]>=s2[0])){ for(int i=1;i<=al;i++) a[i]=s1[al-i]-'0'; for(int i=1;i<=bl;i++) b[i]=s2[bl-i]-'0'; } else{ for(int i=1;i<=bl;i++) a[i]=s2[bl-i]-'0'; for(int i=1;i<=al;i++) b[i]=s1[al-i]-'0'; cl=al,al=bl,bl=cl; cout<<"-"; }// 以上為輸入數據。 for(int i=1;i<=al;i++){ if(a[i]
View Code

codevs 3117 高精乘法:

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 char s1[666],s2[666]; 7 int a[666],b[666],c[666],al,bl,cl; 8 int main(){ 9 cin>>s1>>s2;10 al=strlen(s1);11 bl=strlen(s2);12 for(int i=1;i<=al;i++)13 a[i]=s1[al-i]-'0';14 for(int i=1;i<=bl;i++)15 b[i]=s2[bl-i]-'0';16 // 以上為輸入數據。17 for(int i=1;i<=al;i++){18 for(int j=1;j<=bl;j++){19 c[i+j-1]+=a[i]*b[j];20 c[i+j]+=c[i+j-1]/10;21 c[i+j-1]%=10;22 }23 }24 // 以上為高精乘法。25 cl=al+bl;26 while(cl>1&&!c[cl]) cl--;27 while(cl) {cout<
View Code

codevs 3118 高精除法:

高精除低精(不常用):

1 #include
2 #include
3 #include
4 using namespace std; 5 long long b,s[2][3000],al,l; 6 char a[3000]; 7 void gjcu(){ 8 for(int i=al+100;i>0;i--){ 9 s[0][i]=s[1][i]/b;10 if(s[1][i]%b) s[1][i-1]+=s[1][i]%b*10;11 }12 }13 int main(){14 cin>>a>>b;15 al=strlen(a);16 for(int i=1;i<=al;i++) s[1][100+i]=a[al-i]-'0';17 gjcu();18 l=al+100;19 while(!s[0][l]&&l>101) l--;20 for(int i=l;i>100;i--){21 if(i==100) printf(".");22 printf("%lld",s[0][i]);23 }24 printf("\n");25 return 0;26 }
View Code

高精除高精(基本不用):

思路就是把乘法變成減法。(我这个代码洛谷只给70分)

1 #include
2 #include
3 #include
4 using namespace std; 5 int s[4][3000],al,bl,p,d,ans; 6 char a[3000],b[3000]; 7 int bj(int x,int y){ 8 int i=al; 9 while(s[x][i]==s[y][i]&&i>0) i--;10 if(s[x][i]
s[y][i]) return 1;12 return 0;13 }14 void gjq(){15 for(int i=1;i<=bl+1;i++){16 s[3][i]-=s[2][i];17 if(s[3][i]<0){18 s[3][i]+=10;19 s[3][i+1]-=1;20 }21 }22 }23 void gjcgj(){24 for(int i=al;i>0;i--){25 d=0;26 for(int j=bl+1;j>1;j--) s[3][j]=s[3][j-1];27 s[3][1]=s[1][i];28 p=bj(3,2);29 if(p==1){30 do{31 gjq();32 ++d;33 p=bj(3,2);34 }while(p==1);35 }36 s[0][i]=d;37 }38 }39 int main(){40 cin>>a>>b;41 al=strlen(a);bl=strlen(b);42 for(int i=1;i<=al;i++) s[1][i]=a[al-i]-'0';43 for(int i=1;i<=bl;i++) s[2][i]=b[bl-i]-'0';44 if(al<=bl){45 p=bj(1,2);46 if(p==-1||al
0;i--) printf("%d",s[0][i]);53 printf("\n"); 54 return 0;55 }
View Code
使用時建議大家放在函數里。什麼?你也有起名恐懼症,而且高精加和高精減都是gjj,呵呵~

转载于:https://www.cnblogs.com/J-william/p/6037795.html

你可能感兴趣的文章
Global.asax或IHttpModule实现屏蔽ip和图片防盗链
查看>>
SOCKET CLOSE_WAIT 搜集
查看>>
认识数据地图
查看>>
【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
查看>>
eval()用法
查看>>
尽力而为
查看>>
教你如何将UIImageView视图中的图片变成圆角
查看>>
pku 2635 The Embarrassed Cryptographer 数论——素数筛选法+模拟大数除法
查看>>
还有什么不能做?——细谈在C#中读写Excel系列文章之一
查看>>
[学习笔记]Hadoop 配置调试错误收集
查看>>
网络摘录
查看>>
ehcache + mysql例子与性能测试
查看>>
Java学习笔记50:JSONObject与JSONArray的使用
查看>>
linuxMint下安装ftp工具--filezilla
查看>>
[sh]uniq-sort-awk
查看>>
linux命令(8)kill命令
查看>>
序列变换(Lis变形)
查看>>
ArrayList用法
查看>>
Spring之IoC总结帖
查看>>
37.使用PreResultListener实现回调
查看>>