c语言高精度算法(加法)

1.为什么使用高精度算法啊?

在c语言中,int类型取值范围为(-2^31 ~ 2^31-1),而long long类型取值范围也才仅有(-2^63~ 2^63-1),在处理一些较大的数据时,显然仅靠这些类型,是完全无法处理的

2.高精度加法的核心思想(图解)

3.高精度算法的核心思想                             

其实就是用数组来处理高精度问题
将很大的数字用字符数组存储,再将其中一个个的数字变为整数存入整形数组中

 4.准备工作 

    1.要输入东西            

int main()
{
	char s1[3000], s2[3000];
	scanf("%s%s", s1, s2);
	int a[3000], b[3000], c[3000];//a来装s1,b来装s2,c来求和
	memset(a, 0, sizeof(a));//将数组清零
	memset(b, 0, sizeof(b));
	memset(c, 0, sizeof(c));
	return 0;
}

     2.开始转化数字            

    int l1 = strlen(s1);
	int l2 = strlen(s2);
	int i, j;
	for (i = 0, j = l1 - 1; i < l1; i++, j--)
	{
		a[i] = s1[j] - '0';
	}
	for (i = 0, j = l2 - 1; i < l2; i++, j--)
	{
		b[i] = s2[j] - '0';
	}
    //注意这里我们要逆着放入输入的数,原因是便于我们后续处理,个人认为没啥特别的,也不需要特别理解

 5.核心代码

        开始转化了哦!!!

    int len = 0;
	if (l1 > l2)
	{
		len = l1;
	}
	else
	{
		len = l2;
	}
	for (i = 0; i < len; i++)
	{
		c[i] = a[i] + b[i];
	}
	for (i = 0; i < len; i++)
	{
		if (c[i] >= 10)
		{
			c[i + 1] += c[i] / 10;
			c[i] %= 10;
		}
	}
    //就是我上面那张图解,实际上可以做的更好,但为了便于理解我将这块分成了两部分

 6.最后工作

    i = 2999;
	while (c[i] == 0 && i > 0)//去零,就low点把实际上还有好的办法,但理解第一
	{
		i--;
	}
	for (j = i; j >= 0; j--)//逆着输出这不就对上了吗
	{
		printf("%d", c[j]);
	}

 7.最终代码

#include <stdio.h>
#include <string.h>
int main()
{
	char s1[3000], s2[3000];
	scanf("%s%s", s1, s2);
	int a[3000], b[3000], c[3000];
	memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
	memset(c, 0, sizeof(c));
	int l1 = strlen(s1);
	int l2 = strlen(s2);
	int i, j;
	for (i = 0, j = l1 - 1; i < l1; i++, j--)
	{
		a[i] = s1[j] - '0';
	}
	for (i = 0, j = l2 - 1; i < l2; i++, j--)
	{
		b[i] = s2[j] - '0';
	}
	int len = 0;
	if (l1 > l2)
	{
		len = l1;
	}
	else
	{
		len = l2;
	}
	for (i = 0; i < len; i++)
	{
		c[i] = a[i] + b[i];
	}
	for (i = 0; i < len; i++)
	{
		if (c[i] >= 10)
		{
			c[i + 1] += c[i] / 10;
			c[i] %= 10;
		}
	}
	i = 2999;
	while (c[i] == 0 && i > 0)
	{
		i--;
	}
	for (j = i; j >= 0; j--)
	{
		printf("%d", c[j]);
	}
	return 0;
}

 8.结果展示

2341245213543654576547567
2314231535464575675686788
4655476749008230252234355
D:\vs2019 c\算法分析\Debug\main.c.exe (进程 6968)已退出,代码为 0。
按任意键关闭此窗口. . .

总结

算法魅力无穷,本人水平有限,只能至此。愿与诸君共同进步,奔向美好未来

  • 31
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值