首页 > 其他 > 详细

【最蔡版】高精度A+B

时间:2019-08-06 15:55:41      阅读:81      评论:0      收藏:0      [点我收藏+]

【引子】A+B的神奇解法(更多神奇解法请点击此处获取):

#include<bits/stdc++.h>
using namespace std;
#define i int a,b;
#define ak cin>>a>>b;
#define ioi cout<<a+b;
int main(){i ak ioi}
//DP
#include<bits/stdc++.h> using namespace std; int dp[1005][1005]; int main() { int a,b; cin>>a>>b; dp[0][1]=a,dp[1][0]=b; for(int i=1;i<=1000;i++) { for(int j=1;j<=1000;j++) dp[i][j]=dp[i-1][j]+dp[i][j-1]; } cout<<dp[1][1]; return 0; }

  今天,我们介绍一下高精度A+B。所谓“高精度”,即指超过(unsigned)long long范围的运算。这样的整数无法在32位的计算机上使用任何数据类型存储,这时我们就需要把整数当做字符串来存储。

将数据存入字符串后,然后将个位对齐,这时就可以模拟竖式运算进行加法了,注意进位的问题。减法的方法类似。

#include<bits/stdc++.h>
using namespace std;
char a[505],b[505];
char A[505],B[505],ans[505];
int main()
{
	cin>>a+1>>b+1;//输入
	int la=strlen(a+1),lb=strlen(b+1);
	for(int i=1;i<=la;i++) A[i]=a[la-i+1]-‘0‘;
	for(int i=1;i<=lb;i++) B[i]=b[lb-i+1]-‘0‘;//颠倒顺序,使两个加数个位对齐
	for(int i=1;i<=max(la,lb);i++)
	{
		ans[i]+=A[i]+B[i];//逐位相加,注意是+=而不是=,因为有进位
		if(ans[i]>=10) ans[i]-=10,ans[i+1]++;//进位的操作
	}
	bool xyds=0;//寻找第一个有有效数字(大于0)的数位
	for(int i=500;i>=1;i--)//按数位从高到低输出
	{
		if(ans[i]) xyds=1;
		if(xyds) putchar(ans[i]+‘0‘);//输出
	}
	if(!xyds) putchar(‘0‘);//若和为0,则特判一番
	return 0;
}

  

 

【最蔡版】高精度A+B

原文:https://www.cnblogs.com/dong-ji-yuan/p/11309428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!