高精度算法(一)高精度加法 - Go语言中文社区

高精度算法(一)高精度加法


学过编程的大家一定对int long 不陌生吧,那么自然是知道它们各自能表达的数范围,比如int能表示范围为2^32,这看起来很大,但在大数据时代的如今,不说是int 哪怕是long long也是不够的,那么为了使用或计算这些超出或远超整形大小的数,我们就需要使用多个数来表示这一个数,表示多个数的数据类型在c语言里有数组和字符串。
数组:每个数组元素储存一位数(不一定是个位数,也可能是10 12甚至2000),数组的优点是可以直接进行加减计算,而缺点却是无法直接输入,每位数之间需要有分隔符,这不符合数值输入的习惯
字符串:字符串的优点便是可以直接输入,符合数值输入的习惯,但是它每一个元素储存的是一个字符而不是数字,不可以直接进行运算
综上所述,取长补短,用字符串读取输入,用数组计算输出。
附上代码

#include<stdio.h>
#include<string.h>
#define MAX 1000
int main(void)
{
	char str[MAX];
	int arr1[MAX]={0},arr2[MAX]={0},len,len1,len2,i,j;
	scanf("%s",str);
	len1=strlen(str);
	for(i=0;i<len1;i++)//字符串倒叙导入数组,方便从低位开始运算
		arr1[i]=str[len1-1-i]-'0';
	scanf("%s",str);
	len2=strlen(str);
	for(i=0;i<len2;i++)
	    arr2[i]=str[len2-1-i]-'0';//字符串中的是字符,要转换成数字
	len=(len1>len2)?len1:len2;
	for(i=0;i<len;i++)
	{
		arr1[i+1]+=j=(arr1[i]+arr2[i])/10;//进位
		arr1[i]=(arr1[i]+arr2[i])%10;//保留
	}    
	if(j)len++;//最后一位是否进位
	for(i=0;i<len;i++)	
	    printf("%d",arr1[len-1-i]);
	return 0;    
}

当然,上述代码仅能处理整形加减,想要处理浮点数则需要添加判断条件,以识别小数点,这时最后导出要用到的是字符串而不是数组,当然我们也可以同时处理多位数而不只是一位数,这样可以减少大量计算以提高运行速度,代码将在以后更新。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43844277/article/details/88615573
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 20:19:50
  • 阅读 ( 360 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢