栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

在编程题里有这么一种类型的题目,大数运算,大数有多大呢?特别大,特别大,超过了基本类型的范围,高精度肯定也有四则运算吗,这里主要讲加法,减法乘法除法,后续在讲,喜欢的的记得点个关注哦,这里就介绍高精度加法的解决过程。

人类进行加法运算的时候,会对齐位置,个位对个位,十位对十位,可是计算机输入时,如果长度不一致,是不会对齐的,比如

1111111111
252222



353333
4444444444

这样就不能个位对个位,十位对十位进行相加了,那该怎么办呢?

这个时候,我们就可以把字符串逆序过来啊,对不对。比如像这样

1111111111
222252
3333631111
1111363333



333353
4444444444
7777974444
4444797777

把逆序的加和得到的答案,再逆序,不就是正确答案了?

那么做题的流程就来了!!!!!!

1.首先用两个字符串数组保存大数!

2.然后把字符串逆序输入到整型数组中,方便进行加法!

3.然后按位进行计算,先求和,再进位!

4.最后逆序输出求和进位以后的结果!

上代码:

#include 
#include  
#define LENGTH 1000+1
void nxzfc(char [],int [],int );
int main(void) 
{
	//首先用两个字符串,保存要进行加法的两个数 
	char zf_num1[LENGTH],zf_num2[LENGTH];
	gets(zf_num1);
	gets(zf_num2);
	//求出两个数的长度,为后面逆序做准备 
	int num1_len = strlen(zf_num1);
	int num2_len = strlen(zf_num2);
	//然后把字符串逆序存入整型数组仲
	int num1[LENGTH] = {0};
	int num2[LENGTH] = {0};
	//写一个函数,把字符串逆序存入整型数组
	nxzfc(zf_num1,num1,num1_len);
	nxzfc(zf_num2,num2,num2_len);
	//逆序好了,就可以从左往右开始进行加法运算了
	//这里呢,先实现加法,然后再进位,比较清晰易懂,而且方便
	int i;
	int max_length = num1_len>num2_len?num1_len:num2_len;
	//定义一个和数组,用来保存相加的结果 
	int he[LENGTH] = {0};
	for(i = 0;i < max_length;i++)
	{
		he[i] = num1[i] + num2[i];
	}
	//然后再进位
	int j;
	for(j = 0;j < max_length;j++)
	{
		if(he[j]>=10)
		{
			he[j+1] += he[j]/10; 	//比十大,就进位 
			he[j] %= 10;		 	//十位进位以后,留下个位 
		}
	}
	//判断最大长度的后面一个是不是零,是零说明进位了,总长度要加一
	int k;
	if(he[max_length]!=0)
	{
		for(k = max_length;k >= 0;k--)
		{
			printf("%d",he[k]);
		}
	}
	else
	{
		for(k = max_length-1 ;k >= 0;k--)
		{
			printf("%d",he[k]);
		}
	}
	return 0;
}

void nxzfc(char zf[],int num[],int length)
{
	int i;
	//因为是逆序,zf数组的第一位,就是num数组的最后一位 
	for(i = 0;i < length;i++)
	{
		num[length-i-1] = zf[i] - '0'; 
	}
	
	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号