首页 > 其他分享 >高精度运算——大数加法与乘法

高精度运算——大数加法与乘法

时间:2024-08-16 15:16:21浏览次数:11  
标签:bigNum cout 大数 int res len num 加法 乘法

要点:

  • 加法直接传递进位,乘法先保留进位,后统一处理
  • 使用int数组存储,空间浪费,处理方便
  • 建立bigNum结构(或类),处理清晰方便

代码:

基础定义

#include<bits/stdc++.h>
using namespace std;
char num1[10000];
char num2[10000];
struct bigNum
{
	int num[1000] = {};
	int len;
};
void scan(char* a,bigNum* b)
{
	int l = strlen(a);
	b->len = l;
	for (int i = 0; i < l; i++)
	{
		b->num[i] = a[l - i - 1]-'0';
		//cout << b->num[i];
	}
}

加法

bigNum bigAdd(bigNum* a, bigNum* b)
{
	int carry = 0; int i = 0; int temp = 0;
	int l1 = a->len; int l2 = b->len;
	bigNum res;
	while (i < l1 || i < l2)
	{
		temp = a->num[i] + b->num[i] + carry;
		//cout << temp << endl;
		res.num[i] = temp % 10;
		carry = temp / 10;
		//cout << "c:" << carry << endl;
		i++;
	}
	res.num[i] = carry;
	if (res.num[i] == 0)
		res.len = i+1;
	else
		res.len = i ;
	return res;
}

乘法

bigNum bigMul(bigNum* a, bigNum* b)
{
	bigNum res;
	for (int i = 0; i < a->len; i++)
		for (int j = 0; j < b->len; j++)
			res.num[i + j] += a->num[i] * b->num[j];
	int i = 0;
	while (res.num[i] != 0)
	{
		if (res.num[i] > 9)
		{
			res.num[i + 1] += res.num[i] / 10;
			res.num[i] = res.num[i] % 10;
		}
		i++;
	}
	res.len = i;
	return res;
}

测试主函数

int main()
{
	bigNum a, b;
	cin >> num1 >> num2;
	scan(num1, &a);
	scan(num2, &b);
	bigNum c=bigMul(&a, &b);
	if (c.len == 0)
		cout << 0;
	else
	{
	for (int i = c.len-1; i >= 0; i--)
		cout << c.num[i];
	}
	return 0;
}

标签:bigNum,cout,大数,int,res,len,num,加法,乘法
From: https://www.cnblogs.com/Arc-ux/p/18362915

相关文章

  • Hadoop 中的大数据技术:调优篇(2)
    HDFS—存储优化纠删码纠删码原理概述HDFS默认情况下,一个文件有3个副本,这虽然提高了数据的可靠性,但也带来了2倍的冗余开销。Hadoop3.x引入了纠删码机制,通过计算方法,可以节省大约50%的存储空间。纠删码操作命令[[email protected]]$hdfsecUsage:bin/hdfs......
  • Hadoop 中的大数据技术:调优篇(3)
    HDFS—故障排除NameNode故障处理需求NameNode进程崩溃且存储的数据丢失,如何恢复NameNode?故障模拟终止NameNode进程[lzl@hadoop12current]$kill-919886删除NameNode存储的数据[[email protected]]$rm-rf/opt/module/hadoop-3.1.3/data/dfs/......
  • SSM-国外鞋服代购平台-97782(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    SSM国外鞋服代购平台摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,鞋服代购平台当然也不例外。代购平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过......
  • 掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
    PyTorch提供了几种张量乘法的方法,每种方法都是不同的,并且有不同的应用。我们来详细介绍每个方法,并且详细解释这些函数有什么区别:1、torch.matmultorch.matmul是PyTorch中用于矩阵乘法的函数。它能够处理各种不同维度的张量,并根据张量的维度自动调整其操作方式。torch......
  • SciTech-BigDataAIML-LLM-Transformer Series-Positional Encoding: 位置编码: 统计模
    词汇WE(WordEmbedding):词嵌入PE(PositionalEncoding):位置编码统计模型和大数据的本源是由"MI(移动互联网)"和"IoT(万物互联)"决定的1真正改驱“改革生产生活习惯”的是“国家政策”与“政府”。新经济的产生是以“改革生产生活习惯”为前提.生产生活的习惯改变:行政......
  • 时空大数据:编织地球智慧网络,开启未来决策新篇章
    在地理信息与遥感科学的浩瀚宇宙里,“时空大数据平台”不仅仅是数据的海洋,它是洞察过去、感知现在、预见未来的智慧之眼。本文将深入剖析时空大数据平台的核心价值、技术挑战与未来展望,为您揭开这一时代洪流中的智慧密码。时空大数据:地理信息的时空织锦时空大数据......
  • VL12 4bit超前进位加法器电路
     `timescale1ns/1nsmodulelca_4(  input   [3:0]   A_in ,  input   [3:0]   B_in ,  input         C_1 ,   output wire     CO  ,  output wire[3:0] ......
  • Hadoop 中的大数据技术:MapReduce(2)
    续Hadoop中的大数据技术:MapReduce(1)第3章MapReduce框架原理3.1InputFormat数据输入3.1.1切片与MapTask并行度决定机制问题引出MapTask的并行度决定了Map阶段的任务处理并发程度,从而影响整个Job的处理速度。思考:对于1GB的数据,启动8个MapTask可以提高集群的并发......
  • 代表性大数据技术:Hadoop、Spark与Flink的框架演进
    MapReduce编程模型的提出为大数据分析和处理开创了一条先河,之后陆续涌现出了Hadoop、Spark和Flink等大数据框架。Hadoop2004年,Hadoop的创始人受MapReduce编程模型等一系列论文的启发,对论文中提及的思想进行了编程实现。Hadoop的名字来源于创始人DougCutting儿子的玩具大......
  • P5431 【模板】模意义下的乘法逆元 2
    看到5e6的数据,500ms的时限,\(O(NlogN)\)快速幂直接跑肯定会T掉,那我们就要考虑优化一下式子。我们令\(s=\prod_{1}^{n}{a[i]}\),那我们给第i个式子通分,就为$\frac{k^i*s/a[i]}{s}$\(s/a[i]\)就相当于$\prod^{i-1}_{1}{a[i]}*\prod_{i+1}^{n}{a[i]}$因此我们只需要预......