C++高精度算法(1)

高精度加法:

我把他分为了

1.字符输入数

2.转换字符为数组

3.数组加法计算

4.输出

GET!


#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[105],b[105],c[105],lena,lenb;

先写头文件和需要的变量,头文件用的是万能头文件,所以不需要加其他的。输入因为我们输入是字符串,所以我们定义了string s1、s2 ,对应的是加法的加数。数组a,b也是加数,c是和,也就是所求的答案,lena、lenb用来储存s1、s2的长度。

int main(){
	//转换 
	cin>>s1>>s2;
	lena=s1.size();
	lenb=s2.size();
	for(int i=0;i<lena;i++)a[lena-i]=s1[i]-'0';
	for(int i=0;i<lenb;i++)b[lenb-i]=s2[i]-'0';

这就是字符串转换成数组的代码,lena、lenb用来储存长度便于后续循环转换,for,从0开始,到长度,然后后面需要倒叙输入,为什么呢,按照加法的计算规则,数是由低位加到高位的。

//数组加法 
	int x=0;
	int lenc=max(lena,lenb);
	int k=0;//进位
	for(int i=1;i<=lenc;i++){
		c[i]=a[i]+b[i]+k;
		k=c[i]/10;
		c[i]=c[i]%10;
	}
	if(k)c[++lenc]=k;

先求出和的长度,在加数见取最大的,max(),定义变量k用来进位,然后进行数组加法计算,逐位从低高到相互相加,超出10的取余进位。还需考虑一个情况,如果加法最高位进位需新增一个位数,所以我们在循环过后一个if判断,专门为lenc考虑最高位的进位的

	//输出
	for(int i=lenc;i>=1;i--)cout<<c[i] ;
	return 0;
}

最后输出。


源代码:

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[105],b[105],c[105],lena,lenb;
int main(){
	//转换 
	cin>>s1>>s2;
	lena=s1.size();
	lenb=s2.size();
	for(int i=0;i<lena;i++)a[lena-i]=s1[i]-'0';
	for(int i=0;i<lenb;i++)b[lenb-i]=s2[i]-'0';
	//数组加法 
	int x=0;
	int lenc=max(lena,lenb);
	int k=0;//进位
	for(int i=1;i<=lenc;i++){
		c[i]=a[i]+b[i]+k;
		k=c[i]/10;
		c[i]=c[i]%10;
	}
	if(k)c[++lenc]=k;
	//输出
	for(int i=lenc;i>=1;i--)cout<<c[i] ;
	return 0;
}

【如有更佳想法或建议,欢迎讨论!】

【原创作品,未经许可,谢绝转载(虽然讲得也挺拉)】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗狗霸霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值