编程学习网 > 编程语言 > C/C++开发 > 如何用c语言编程写一个加法(怎么用c语言编写一个高精度加法)
2022
07-19

如何用c语言编程写一个加法(怎么用c语言编写一个高精度加法)

说到如何用C语言编程进行加法运算,一些理论知识对于初学者来说帮助不大,因此接下来以一个题目为例,看看如何怎么来处理。

题目是:计算a+b的值,a,b皆为不超过240位的正整数。

大致思路:

(1):位数很多,所以需要用数组或者字符串。

(2):加法的话,就是超过十给前一位加一嘛。

(3):字符串加和就靠-'0'

随后想到两个数位数不同时,相同下标的数组元素是不匹配的,想过补零,但感觉比较麻烦,便通过strlen函数表示出相应的需要相加的元素下标。

于是,也就大致写出来的,但也有一部分测试是不正确的,因为一些方面没有考虑清楚,如下所示:

小问题:(1):开始时,以为较大的数相比较小数多出的位数,可以直接赋值给输出的数组,但实际上也是有可能从后不断加和进一的,所以也需要判断是否需要进1.

(2)我由于把较大数的位数当作输出数组(结果)的元素数目,所以当加和后,首位加和超过10,那么输出的位数也要加1。由于9+9<20,所以我直接在输出数组前printf了一个1来解决这个问题。(当然要先判断首位有没有超过10)

代码:

//高精度加法

#include<stdio.h>

#include<string.h>

int main()

{

	char a[241] = "";

	char b[241] = "";

	int c[241] = { 0 };//输出

	scanf("%s", &a);

	scanf("%s", &b);

	int bn = strlen(b);

	int an = strlen(a);

	if (an >= bn)//判断谁位数多,就把相差的位数赋值给数组c

	{

		int flag = 0;//判断上一位相加有无进1

		for (int i = 0; bn - 1 - i >= 0; i++)//从两数末位取到较小数的首位

		{

			if (a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' + flag < 10)//无需进1

			{

				c[an - 1 - i] = a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' + flag;

				flag = 0;

			}

			if (a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' + flag >= 10)//需要进1

			{

				c[an - 1 - i] = a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' - 10 + flag;

				flag = 1;

			}

		}

		for (int k = an - bn - 1; k >= 0; k--)//较大数的剩余的位数,同样需要判断是否需要进1

		{

			if (a[k] - '0' + flag < 10)

			{

				c[k] = a[k] - '0' + flag;

				flag = 0;

			}

			if (a[k] - '0' + flag >= 10)

			{

				c[k] = a[k] - '0' + flag - 10;

				flag = 1;

			}

		}

		if (flag == 0)for (int k = 0; k < an; k++)printf("%d", c[k]);

		if (flag == 1)

		{

			printf("1");//由于以较大数的位数作为数组c的项数,如果flag==1则代表最高位加和大于10,

			//需要增添一位,又由于9+9<20,首位只可能为1。

			for (int k = 0; k < an; k++)printf("%d", c[k]);//输出数组c,也就是两数和。

		}

	}

	//下面与上面类似,仅仅两个数大小相反,部分区域把ab互换就可以了

	if (an < bn)

	{

		int flag = 0;

		for (int i = 0; an - 1 - i >= 0; i++)

		{

			if (a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' + flag < 10)

			{

				c[bn - 1 - i] = a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' + flag;

				flag = 0;

			}

			if (a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' + flag >= 10)

			{

				c[bn - 1 - i] = a[an - 1 - i] + b[bn - 1 - i] - '0' - '0' - 10 + flag;

				flag = 1;

			}

		}

		for (int k = bn - an - 1; k >= 0; k--)

		{

			if (b[k] - '0' + flag < 10)

			{

				c[k] = b[k] - '0' + flag;

				flag = 0;

			}

			if (b[k] - '0' + flag >= 10)

			{

				c[k] = b[k] - '0' + flag - 10;

				flag = 1;

			}

		}

		if (flag == 0)for (int k = 0; k < bn; k++)printf("%d", c[k]);

		if (flag == 1)

		{

			printf("1");

			for (int k = 0; k < bn; k++)printf("%d", c[k]);

		}

	}

	return 0;

}
以上就是“如何用c语言编程写一个加法(怎么用c语言编写一个高精度加法)”的详细内容,想要了解更多C语言教程欢迎持续关注编程学习

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取