高精度算法(加法)----C语言

本文详细介绍了如何使用C语言实现高精度加法,通过字符数组存储大整数,包括输入处理、数组操作和结果打印,适合初学者学习。
摘要由CSDN通过智能技术生成

首先我要先声明我用的编译器是VS2022,由于我在csdn上没搜到一篇关于c语言高精度算法的文章,所以我决定写一篇c语言的高精度加法文章讲解,希望刚开始以c语言学习编程的同学能从中学会高精度算法--加法。

当我们处理两个整数数(a,b)相加时,会存在一定的限制,因为无论是int还是longlong类型,都有一定的范围,当我们相加的两个数超出这个范围时,就需要我们的高精度算法了。

所谓的高精度算法其实就是将每个数字看成一个字符,然后存到一个字符数组中去,进而进行运算。我们现在展示代码,并且代码后会有解析,若看不懂,可以评论提问。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int Max(int x, int y)
{
	if (x >= y)
		return x;
	else  return y;

}//一个比大小的自定义函数,十分简单
int main() {
	int a, b, c;//a,b,c是否进行初始化影响并不大
	char  arr[600] = {0}, brr[600] = {0};//使数组中的元素先为0,然后储存输入的两个树;
	int numa[600] = { 0 }, numb[600] = { 0 }, numc[600] = { 0 };//这是关键一步,此时使这三个数组中的元素都为0,可以为后面若两个数组的元素位数不同的话,那就可以自动补0;
	scanf_s("%s", arr,600);
	scanf_s("%s", brr,600);//取输入的两个数,注意字符要用%s,且不用加&,而且还要带上数组元素的个数,如果不带,就会产生访问冲突;
	a = strlen(arr);
	b = strlen(brr);//这两步均是计算输入的字符串长度,也就是数字的个数;
	for (int i = 0;i < a;i++) {
		numa[a - i] = arr[i]-'0';
	}
	for (int i = 0;i < b;i++) {
		numb[b - i] = brr[i]-'0';
	}//这两步是将输入的那个数组放入一个新的数组中,并进行倒序处理,因为倒序后更方便个位与个位相加等问题;
	c = Max(a, b) + 1;//这步是为了得到两个数相加后数组的个数是多少,其中+1是为了更有保障一些;
	for (int i = 1;i <= c;i++) {
		numc[i] += numa[i] + numb[i];
		numc[i + 1] = numc[i] / 10;
		numc[i] = numc[i] % 10;
	}//将两个数组下标相同的数相加,得到一个新数组下标所对的数,若相加后大于10,则其余数与下一个下标数相加,最终得到两数相加后的一个新数组。
	if (numc[c] == 0 && c > 0)//首位不是0保证
		c--;
	for (int i = c;i >0;i--) {
		printf("%d", numc[i]);
	}//逆着打印新数组的各项元素,最终得到两数的和。
	return 0;
}

如果其中倒序不理解原因的话,你可以正序试试能不能出来,也可以那草稿纸写一下,更方便理解。期待点赞!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值