大数据的加法、减法、乘法以及阶乘的计算问题(源代码附上)

大数据知识点 谁看谁都迷糊! 阅读详情

  限于数据类型的长度有限,对于大数据的计算就无能为力了,这里主要是采用字符数组解决精度问题。

  加法、减法的思路差不多,主要就是采用我们固有的思维来计算,直接一位一位地相加。减法的话,先

判断2个数的大小,让较大的数始终在前面,并且改变相应的数据长度,把结果放在一个临时的缓冲区里面。

计算完毕后,再把数据写入到用户的缓冲区中,并且除去前面多余的0。乘法的计算就有点不同了,最大的

不同之处就是在于我们自己算乘法的时候还要算加法,这里我把加法合到了算乘法的过程中,也免除了溢出的

危险,计算量也小些了,每一位乘之前取结果当前位的值保存起来,然后连带进位一起加起来,就避免了最后

算加法的问题。

  算阶乘的时候,主要就是确定该给临时缓冲区分配多大内存。最后大概算了下,一位数分配1*1个,两位数就分配2*1个,

三位数就分配3*1。专门写了个函数用于返回分配数量大小。分配3个这么大的缓冲区,一个存取当前每一次的计算结果(逆序表示),

第二个复制该结果(逆序表示),第三个存取待乘的数据(顺序表示)。还是乘法结束后,加法也完毕了,然后进入下一次乘法。

怎么想的就是怎么做的。用gcc编译的时候,注意带上-lm选项,链接math库,下边是一个带简单错误处理的demo以及源代码。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>

int ystrlen( const char* str )
{
	int len;
	assert( str != NULL );
	len = 0;
	
	while( (*str--) !='\0' ) 
	{ 
		len++; 
	} 
	return len;
}

int get_allocate_num(const int* num1, const int* num2)
{
	return (*num1 >= *num2) ? *num1+1 : *num2+1;
}

void big_add(const char *num1, const char *num2, char *res)
{
	//res存储计算后的结果
	int len1 = strlen(num1);
	int len2 = strlen(num2);
	int i, j, k, num;
	char flag = 0;//进位标志
	char *temp_res, temp;//临时存取结果

	num = get_allocate_num(&len1, &len2);
	temp_res = (char *)malloc(num);

	i = len1 - 1;
	j = len2 - 1;
	for (k = num - 1; k >= 0; k--) {
		if (i >= 0 && j >= 0) {//加号两边都有数
			temp = num1[i--] + num2[j--] + flag;
			if (temp > 0x69) {//有进位
				temp_res[k] = temp - 0x3a;
				flag = 0x01;
			} else {
				temp_res[k] = temp - 0x30;
				flag = 0x0;
			}
		} else if (i >= 0 && j < 0) {//加号右边结束
			temp = num1[i--] + flag;
			if (temp > 0x39) {//有进位
				temp_res[k] = 0x30;
				flag = 0x01;
			} else {
				temp_res[k] = temp;
				flag = 0x0;
			}
		} else if (i < 0 && j >= 0) {//加号左边结束
			temp = num2[j--] + flag;
			if (temp > 0x39) {//有进位
				temp_res[k] = 0x30;
				flag = 0x01;
			} else {
				temp_res[k] = temp;
				flag = 0x0;
			}
		} else {//加号左边 右边刚结束
			temp = flag;
			if (temp) {//有无进位计算此次就结束
				temp_res[0] = 0x31;
				strncpy(res, temp_res, num);
				res[num] = '\0';
			} else {//此时既无进位
				strncpy(res, &temp_res[1], num-1);
				res[num-1] = '\0';
			}
		}
	}
	free(temp_res);
}

int big_cmp(const char *num1, const int *len1, const char *num2, const int *len2) 
{
	int i;

	if (*len1 > *len2) {//减数大
		return 1;
	} else if (*len1 < *len2) {//被减数大
		return -1;
	} else {
		for (i = 0; i < *len1; i++) {
			if (num1[i] > num2[i]) {
				return 1;
			} else if (num1[i] < num2[i]) {
				return -1;
			}
		}
		return 0;//2个数相等
	}
}

void earse_zero(char *res, const int *num)
{//擦除多余的0
	int len;
	int i = 0;
	char *temp;

	if (res[0] == '-') {
		i = 1;
		while (res[i] == 0x30) {
			i++;
		}
		if (i != 1) {
			len = *num - i + 1;
			temp = (char *)malloc(len);
			strncpy(temp, &res[i], len);
			strncpy(&res[1], temp, len);
			free(temp);
		}
	} else {
		while (res[i] == 0x30) {
			i++;
		}
		if (i != 0) {
			len = *num - i;
			temp = (char *)malloc(len);
			strncpy(temp, &res[i], len);
			strncpy(res, temp, len);
			free(temp);
		}
	}
}
void big_sub(const char *num1, const char *num2, char *res)
{
	//res存储计算后的结果
	int len1 = strlen(num1);
	int len2 = strlen(num2);
	int i, j, k, num;
	char flag = 0, flag_negetive = 0;//进位标志
	char *temp_res, temp;//临时存取结果
	
	i = len1 - 1;
	j = len2 - 1;
	k = big_cmp(num1, &len1, num2, &len2);
	if (k == 0) {
		//相等
		res[0] = 0x30;
		res[1] = '\0';
	} else {
		//不等
		num = get_allocate_num(&len1, &len2);
		temp_res = (char *)malloc(num);
		if (k == -1) {//始终让num1指向较大数,同时也改变数据的长度
			k = (int)num1;
			num1 = num2;
			num2 = (const char *)k;
			k = i;
			i	 = j;
			j	 = k;
			flag_negetive = 1;
		}
		for (k = num - 1; k > 0; k--) {
			if (j >= 0) {
				if (k == 1 && i == 0 && j == 0) {//位数相同
					temp_res[1] = num1[0] - num2[0] - flag + 0x30;
					if (flag_negetive == 1) {//结果为负数
						strncpy(&res[1], &temp_res[1], num-1);
						res[0] = '-';
						res[num] = '\0';
					} else {
						strncpy(res, &temp_res[1], num-1);
						res[num-1] = '\0';
					}
				} else {
					temp = num1[i--] - num2[j--] - flag;
					if (temp < 0x0) {//有借位
						temp_res[k] = temp + 0x3a;
						flag = 0x01;
					} else {
						temp_res[k] = temp + 0x30;
						flag = 0x0;
					}
				}
			} else {
				temp = num1[i--] - flag;
				if (k == 1) {//最后一位
					if (temp > 0x30) {
						temp_res[1] = temp;
						if (flag_negetive == 1) {//结果为负数
							temp_res[0] = '-';//添加负号
							strncpy(res, temp_res, num);
							res[num] = '\0';
						} else {
							strncpy(res, &temp_res[1], num-1);
							res[num-1] = '\0';
						}
					} else {//有借位
						if (flag_negetive == 1) {//结果是负数
							temp_res[1] = '-';
							strncpy(res, &temp_res[1], num-1);
							res[num-1] = '\0';
						} else {
							strncpy(res, &temp_res[2], num-2);
							res[num-2] = '\0';
						}
					}
				} else {
					if (temp >= 0x30) {
						temp_res[k] = temp;
						flag = 0x0;
					} else {//有借位
						temp_res[k] = temp + 0xa;
						flag = 0x01;
					}
				}
			}
		}
		free(temp_res);
		earse_zero(res, &num);
	}
}

void big_mul(const char *num1, const char *num2, char *res)
{
	int len1 = strlen(num1);//num1为乘数
	int len2 = strlen(num2);
	int i, j, k;
	char *temp_res, temp, temp_mul, last_res;
	char flag = 0x0;

	if (num1[0] == 0x30 || num2[0] == 0x30) {
		res[0] = 0x30;
		res[1] = '\0';
	} else {
		k = len1 + len2;
		temp_res = (char *)malloc(k);
		memset(temp_res, 0, k);
		
		for (i = len2 - 1; i >= 0; i--) {
			k = len1 + i;
			for (j = len1 - 1; j >= 0; j--) {
				//尽可能减少循环 每次的结果都是加了上次的结果 避免再把结果加起来
				if (i == len2 - 1 || temp_res[k] == 0x0) {
					//第一次乘的时候或者当前位置是0
					last_res = 0x0;
				} else {
					//取得上一次当前位置的值
					last_res = temp_res[k] - 0x30;
				}
				temp_mul = (num2[i] - 0x30) * (num1[j] - 0x30) + flag + last_res;//保存每一位的乘积
				temp = temp_mul / 10;
				if (temp > 0) {
					//有余数
					flag = temp;
				} else {
					flag = 0x0;
				}
				temp_res[k--] = (temp_mul % 10) + 0x30;
			}
			if (temp > 0 || temp_res[0] == 0x0) {
				//每一次循环结束检查最高位以及那些结果不为k位数的
				temp_res[k] = flag + 0x30;
			}
			flag = 0x0;//重置
		}
		k = len1 + len2;
		strncpy(res, temp_res, k);
		res[k] = '\0';
		k++;//包含'\0'的长度
		earse_zero(res, &k);
		free(temp_res);
	}
}

//*num待计算阶乘的数的大小,*len该数的长度
int get_fac_allocate_num(const char *num, const int *len)
{
	int i, allocate_num = 0;
	int data = atoi(num);

	for (i = 1; i < *len; i++) {
		allocate_num += i*9*pow(10, i-1);
	}
	allocate_num += *len*(data-pow(10, i-1)+1);//加上剩下的

	return allocate_num;
}

//阶乘
void big_fac(const char *num, char *res)
{
	int len = strlen(num), data;
	int len1, len2;
	int i, j, k, m, l;
	char *temp_res, temp, temp_mul, last_res;
	char flag = 0x0;

	data = atoi(num);
	if (data > 2) {
		m = get_fac_allocate_num(num, &len);
		temp_res = (char *)malloc(m*3);//前m个字节保存计算结果,后2块保存数据
		memset(temp_res, 0, m*3);
		strncpy(temp_res+m-len, num, len);
		for (l = data - 1; l >= 2; l--) {
			//乘法执行*num-2次
			memcpy(temp_res+m, temp_res, m);//之前用strncpy居然没拷贝进去,发现strncpy碰到0就不拷贝了,那要参数n干啥
			sprintf(&temp_res[2*m], "%d", l);
			len1 = ystrlen(&temp_res[2*m-1]);//数据是倒着存储的,得倒着算长度
			len2 = strlen(&temp_res[2*m]);
			for (i = len2 - 1; i >= 0; i--) {
				//k = len1 + i;
				k = m - len2 + i;//定位到最后面那个数
				for (j = 1; j <= len1; j++) {
					//尽可能减少循环 每次的结果都是加了上次的结果 避免再把结果加起来
					if (i == len2 - 1 || temp_res[k] == 0x0) {
						//第一次乘的时候或者当前位置是0
						last_res = 0x0;
					} else {
						//取得上一次当前位置的值
						last_res = temp_res[k] - 0x30;
					}
					temp_mul = (temp_res[2*m+i] - 0x30) * (temp_res[2*m-j] - 0x30) + flag + last_res;//保存每一位的乘积
					temp = temp_mul / 10;
					if (temp > 0) {
						//有余数
						flag = temp;
					} else {
						flag = 0x0;
					}
					temp_res[k--] = (temp_mul % 10) + 0x30;
				}
				if (temp > 0) {
					//每一次循环结束检查最高位以及那些结果不为k位数的
					temp_res[k] = flag + 0x30;
				}
				flag = 0x0;//重置
			}
		}
		if (temp > 0) {
			//有进位
			strncpy(res, &temp_res[k], m - k);
			res[m - k] = '\0';
		} else {
			strncpy(res, &temp_res[k+1], m - k - 1);
			res[m-k-1] = '\0';
		}
		free(temp_res);
	} else {
		sprintf(res, "%d", data);
		if (res[0] == 0x30) {
			res[0] = 0x31;
		}
	}
}

void show_choice()
{
	printf("**************大数计算问题****************\n");
	printf("*请选择操作类型                          *\n");
	printf("*1.加法                            2.减法*\n");
	printf("*3.乘法                            4.阶乘*\n");
	printf("******************5.退出******************\n");
	printf("******************************************\n");
}

void show_input(const char *choice)
{
	char a[500], b[500], c[1000000];
	switch (*choice) {
	case 1:
		printf("请输入加数(输入不是数字,后果自负): ");
		scanf("%s", a);
		printf("请输入被加数(输入不是数字,后果自负): ");
		scanf("%s", b);
		if (a[0] >= 0x30 && a[0] <= 0x39 || a[0] == '-' && b[0] >= 0x30 && b[0] <= 0x39 || b[0] == '-') {
			if (a[0] == '-' && b[0] == '-') {
				big_add(&b[1], &a[1], c);
				printf("结果为: -%s\n", c);
			} else if (a[0] == '-' && b[0] != '-') {
				big_sub(b, &a[1], c);
				printf("结果为: %s\n", c);
			} else if (a[0] != '-' && b[0] == '-') {
				big_sub(a, &b[1], c);
				printf("结果为: %s\n", c);
			} else {
				big_add(a, b, c);
				printf("结果为: %s\n", c);
			}
		} else {
			printf("请输入整数\n");
		}
		break;
	case 2:
		printf("请输入减数(输入不是数字,后果自负): ");
		scanf("%s", a);
		printf("请输入被减数(输入不是数字,后果自负): ");
		scanf("%s", b);
		if (a[0] >= 0x30 && a[0] <= 0x39 || a[0] == '-' && b[0] >= 0x30 && b[0] <= 0x39 || b[0] == '-') {
			if (a[0] == '-' && b[0] == '-') {
				big_sub(&b[1], &a[1], c);
				printf("结果为: %s\n", c);
			} else if (a[0] == '-' && b[0] != '-') {
				big_add(&a[1], b, c);
				printf("结果为: -%s\n", c);
			} else if (a[0] != '-' && b[0] == '-') {
				big_add(a, &b[1], c);
				printf("结果为: %s\n", c);
			} else {
				big_sub(a, b, c);
				printf("结果为: %s\n", c);
			}
		} else {
			printf("请输入整数\n");
		}
		break;
	case 3:
		printf("请输入乘数(输入不是数字,后果自负): ");
		scanf("%s", a);
		printf("请输入被乘数(输入不是数字,后果自负): ");
		scanf("%s", b);
		if (a[0] >= 0x30 && a[0] <= 0x39 || a[0] == '-' && b[0] >= 0x30 && b[0] <= 0x39 || b[0] == '-') {
			if (a[0] == '-' && b[0] == '-') {
				big_mul(&a[1], &b[1], c);
				printf("结果为: %s\n", c);
			} else if (a[0] == '-' && b[0] != '-') {
				big_mul(&a[1], b, c);
				printf("结果为: -%s\n", c);
			} else if (a[0] != '-' && b[0] == '-') {
				big_mul(a, &b[1], c);
				printf("结果为: -%s\n", c);
			} else {
				big_mul(a, b, c);
				printf("结果为: %s\n", c);
			}
		} else {
			printf("请输入整数\n");
		}
		break;
	case 4:
		printf("请输入待计算阶乘的数(缓冲有限,最好不要超过7位数):");
		scanf("%s", a);
		if (strlen(a) <= 7) {
			if (a[0] < 0x30 || a[0] > 0x39) {
				printf("请输入自然数\n");
			} else {
				big_fac(a, c);
				printf("%s! = %s\n", a, c);
			}
		} else {
			printf("数据太大,无法计算\n");
		}
		break;
	}
}
int main(int argc, char *argv[])
{
	char choice[100];

	while (1) {
		show_choice();
		scanf("%s", choice);
		if (choice[0] >= '1' && choice[0] <= '4' && choice[1] == '\0') {
			choice[0] -= 0x30;
			show_input(choice);
		} else if (choice[0] == '5' && choice[1] == '\0') {
			printf("谢谢使用!\n");
			break;
		} else {
			printf("无效的输入(请看大屏幕)\n");
		}
	}

	return 0;
}

下边是程序运行截图。

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01 编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩ 阅读详情

相关推荐

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01

算法设计

weixin_49199313的博客 1501

opencv常见问题

1.TypeError: Expected cv::UMat for argument 'img' 可能是你的数组不是np.array的。或者你的数据存储不连续,使用以下命令: image = np.ascontiguousarray(image)

weixin_38907330的博客 248

VC++实现大数阶乘:算法与数据结构实战

大数运算,顾名思义,是指处理超出计算机标准数据类型(如32位或64位整数)的数值运算。例如,在密码学、高精度计算、以及数据分析等领域,经常需要处理上百万甚至更多的位数。这些问题的复杂度远超过传统算术运算,因此,寻求更有效的算法和数据结构是大数运算的核心挑战。处理大数运算时,传统数据类型(如int、float等)已无法应对需求,因为它们有固定的位数限制。因此,我们需要自定义数据结构来表示大数。本章将讨论大数的表示方法,并着重介绍自定义数据结构的设计原则及其操作函数实现。

weixin_29607511的博客 708

大数据的加法、减法、乘法以及阶乘的计算问题

限于数据类型的长度有限,对于大数据的计算就无能为力了,这里主要是采用字符数组解决精度问题。   加法、减法的思路差不多,主要就是采用我们固有的思维来计算,直接一位一位地相加。减法的话,先 判断2个数的大小,让较大的数始终在前面,并且改变相应的数据长度,把结果放在一个临时的缓冲区里面。 计算完毕后,再把数据写入到用户的缓冲区中,并且除去前面多余的0。乘法的计算就有点不同了,最大的

Health's Box 1333

求N的阶乘(大整数乘法)

【问题描述】 精确计算N的阶乘。其中,N可能是小于200的任意正整数。 【输入形式】 输入文件为当前目录下的factor.in。 该文件只包含一个正整数,表示需要求该正整数的阶乘。 【输出形式】 输出文件为当前目录下的factor.out。 该文件只包含一个正整数,表示该正整数的阶乘,每行最多输出50个数字。

阶乘的源代码

输入几,就可以求得几的阶乘,当然输入的数要在范围之内

大数据的运算加减乘除

BigData.h:#ifndef__BIG_DATA_H__ #define__BIG_DATA_H__ #include<assert.h> #include<string> typedeflonglongINT64; //#defineMININT64-9223372036854775808//编译器检查有错 // ...

weixin_33785972的博客 263

计算阶乘的的源代码

这是一个运用jsp脚本语言源代码 新手可以看一下 希望能被用上

大数据实时运算

离线运算:都是把日志文件存储好后处理日志文件 实时运算:Storm Spark core:处理离线运算 SQL:也是处理离线运算 Grable:图运算 ml/Mlib:基于机器学习 streaming:实时运算 streaming:实时推荐系统、实时更新相关功能(但前某一个广告的点击率) Streaming => DStream RDD集合 创建发送者 object CreateData { def main(args: Array[String]): Unit = { // 通过套接字发

q736317048的博客 509

Windows 10/11下Drive Composer Pro 2.9.0完整安装与连接ACS880变频器实战教程

本文详细介绍了在Windows 10/11系统上安装Drive Composer Pro 2.9.0并连接ACS880变频器的完整教程。从系统环境准备、软件安装到许可证配置,再到USB、蓝牙和以太网三种连接方式的实战操作,帮助工业自动化工程师快速掌握ABB变频器的调试技巧。

weixin_32956805的博客 528

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 308

大数运算(加、减、乘、除)

文章目录前言一、大数加法1. 基本思想2. 代码实现二、大数减法1. 基本思想2. 代码实现三、大数乘法1. 基本思想2. 代码实现四、大数除法1. 基本思想2. 代码实现 前言 一、大数加法 1. 基本思想 2. 代码实现 二、大数减法 1. 基本思想 2. 代码实现 三、大数乘法 1. 基本思想 2. 代码实现 四、大数除法 1. 基本思想 2. 代码实现 ...

2021dragon的博客 1万+

h5支付不能打开支付宝 ios_iOS支付宝H5支付无法返回APP解决方案

本文前大段在讲楼主是如何解决这个问题的,以及中间遇到的麻烦。赶时间的同学可以直接看最后的 最终解决方案。在讨论之前,我们先看看官方文档上的一句话:注意:在iOS系统中,唤起支付宝App支付完成后,不会自动回到浏览器或商户APP。用户可手工切回到浏览器或商户APP;支付宝H5收银台会自动跳转回商户return_url指定的页面。what? 官方直接跟我们说GG了?楼主不甘心,还是想尝试一下。借鉴之前...

weixin_39864101的博客 854

【Java入门到精通】*基础篇

Java入门教程摘要(1-6期) 本系列从零讲解Java,基于Java 8 LTS版本。 Java历史与特性:1995年Sun公司发布,以跨平台、面向对象为核心优势,应用于后端、安卓、大数据等领域。 跨平台原理:通过JVM将字节码转换为机器码,实现"一次编写,到处运行"。 环境组件:JDK(开发工具包)⊃ JRE(运行环境)⊃ JVM(虚拟机),开发需安装JDK。 安装配置:提供Windows/Mac的JDK安装指南,强调路径无中文/空格。 环境变量:设置JAVA_HOME指向JDK路径,Path添加bin

2301_81248642的博客 931

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

C# 与 PaddleOCR:一行代码实现高效图片文字识别的实战指南

本文介绍了如何使用 PaddleOCRSharp 进行图像文字识别,涵盖了从环境准备到高级功能的完整流程。首先,通过 NuGet 安装 PaddleOCRSharp 并下载预训练模型。接着,展示了单张图片识别的最小化示例和详细实现,包括模型配置、图片预处理和结果输出。进阶功能部分介绍了多语言和竖排文本识别的实现方法。此外,文章还提供了 WinForms 图形界面开发的完整示例,展示了如何通过界面加载图片、执行识别并展示结果。最后,探讨了批量处理优化策略,如并行处理多张图片以提高性能。通过这些步骤,开发者可以

墨夶的博客 1004

大数阶乘的处理

1.开辟一个大小为10000或更大的整形数组; 2.数组的每一个元素只保存计算结果中的一位数字,数组索引最小的元素对应计算结果的最小位,依次类推; 3.在计算中,将1-n中的每一个数字都与数组中的每一个数相乘,将与某元素的乘积仍保存在该元素中; 4.在1-n中的每个数字与所有元素做完乘积之后,依次每一个元素中的数字是否超过10(或者radix),若超过,则向前进位; C实现

qq_36950065的博客 511

基于高光谱的物质反演与分类 — 技术文章(原理详解 + 深度代码实现)

高光谱遥感 / 近场光谱采集产生逐像素上百波段的光谱曲线,是物质识别与定量反演(abundance / composition estimation)和语义分类(landcover / material class)的一把利器。本文第一部分对常用模型(线性混合模型、非线性辐射传输、稀疏反演、降维与特征选择、分类器/神经网络)进行数学推导与理论分析;第二部分给出两套完整实现:A. 基于 LMM 的约束最小二乘 / 稀疏反演流水线(含端到端评估);

VectorShift的博客 220

【竞赛拙见】2.高精度运算-大数据加法

在竞赛题中,求两位数的和看似非常简单,但是当我们兴致勃勃地把自己不经过大脑思考就写出的代码提交上去的时候竟发现一个测试点都没有通过。 问题到底出现在哪里呢? 这就涉及到了高精度运算的问题。 大数据加法 通常我们知道,类似int、double这样的数据类型都有各自的精度范围,但是当我们计算一个特别大的数据的时候往往都会超出这个精度范围,所以我们需要一个方法来解决这个问题。 在我们小学开始学习加法运算的时候,我们用的是笔算的方法,而...

江舒铭的博客 289

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言实现大数据的加法

用链表实现大数据(超出int型的范围-2147483647—2147483647)的加法: 程序思想: 1、头插法创建两个字符串链表list1和list2,并把list1和list2的每个节点减去'0',即可得到数字; 2、先令进位flag等于0,如果接下来两个节点和进位相加的结果大于9,则取它们之和的余,用头插法输出,同时令进位flag为1; 3、如果两个节点和进位相加的结果小余9,则把...

Sundial_dream的博客 3333

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++实现大数据的加法、减法和乘法

最近在做大数据的四则运算,

u011137205的专栏 3423

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大数据加法(string与int转化)

#include #include #include #include using namespace std; string myadd(string aa,string bb) { int localaa=aa.length()-1,localbb=bb.length()-1; int next=0,icc; string cc,result; s

woshiyisang的专栏 1162

大数据相加

ACM和各大OJ经典题目:大数据的相加#include &lt;stdio.h&gt;#include &lt;string.h&gt;int main(){int num(char s);char a[1000]={0},b[1000]={0};int len1,len2,max;int i,j;while(scanf("%s %s",a,b)!=EOF){char c[1000]={0},d[...

weixin_42091161的博客 516
上一篇: Windows扫雷的设计思路与实现
下一篇: win 32sdk编写贪吃蛇(附源代码)
complety
博客等级 码龄16年 55粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值