高精度

高精度加法:
复制代码
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; string s1,s2; int a[N],b[N],c[N],t,len; int main() { cin>>s1>>s2; for(int i=0;i<s1.size();i++) a[s1.size()-i]=s1[i]-'0'; for(int i=0;i<s2.size();i++) b[s2.size()-i]=s2[i]-'0'; for(int i=1;i<=max(s1.size(),s2.size())+1;i++) { c[i]=a[i]+b[i]+t;//t是进位,要加上上一位进的位 t=c[i]/10; c[i]%=10; } len=max(s1.size(),s2.size())+1; if(c[max(s1.size(),s2.size())+2]>0) len++;//判断是否最大的位进一位 while(len>1&&c[len]==0) len--;//清除前导0 for(int i=len;i>=1;i--) cout<<c[i]; return 0; }
复制代码

 

高精度乘法:

复制代码
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; string s1,s2; int len,a[N],b[N],c[N*10],t; int main() { cin>>s1>>s2; for(int i=0;i<s1.size();i++) a[s1.size()-i]=s1[i]-'0'; for(int i=0;i<s2.size();i++) b[s2.size()-i]=s2[i]-'0'; for(int i=1;i<=s1.size();i++) { t=0;//进位 for(int j=1;j<=s2.size();j++) { c[i+j-1]=a[i]*b[j]+t+c[i+j-1];//i+j-1是位数,第一位*第一位得到的数要在第一位才行 t=c[i+j-1]/10; c[i+j-1]%=10; } c[i+s2.size()]=t;//最高位进位 } len=s1.size()+s2.size(); while(len>1&&c[len]==0) len--; for(int i=len;i>=1;i--) cout<<c[i]; return 0; }
复制代码

 

1|0[NOIP1998 普及组] 阶乘之和

复制代码
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int a[N],b[N],len=100,n; int main() { cin>>n; a[0]=b[0]=1; for(int i=2;i<=n;i++) { for(int j=0;j<=100;j++) b[j]*=i; for(int j=0;j<=100;j++) if(b[j]>9) b[j+1]+=b[j]/10,b[j]%=10; for(int j=0;j<=100;j++) { a[j]+=b[j]; if(a[j]>9) a[j+1]+=a[j]/10,a[j]%=10; } } while(a[len]==0&&len>0) len--; for(int i=len;i>=0;i--) cout<<a[i]; }
复制代码

 


__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17455326.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
-- --
点击右上角即可分享
微信分享提示