首页 > 其他分享 >高精度加法

高精度加法

时间:2024-09-03 16:16:36浏览次数:10  
标签:index 高精度 int num3 len 加法 flag 字符

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

/*
按顺序打印数组元素
flag为true时正序打印
flag为false时倒序打印
*/
template <typename T>
void show(T arr[], int len, bool flag=true){
	if(flag)	// 正序打印
		for(int i=0;i<len;i++)
			cout << arr[i];
	else		// 逆序打印
		for(int i=len-1;i>=0;i--)
			cout << arr[i];
	cout << endl;
}

int main()
{
	string str1, str2;
	// 字符串方式获取数字
	cin >> str1 >> str2;
	
	// 确定字符串的长度
	int len1 = str1.length();
	int len2 = str2.length();
	// 取最长的字符长度作为转换后的数字数组长度,确保长度不一的加数遍历不会越界
	// 如1248+384466转为842100 和 664483
	int len = len1 > len2 ? len1 : len2;
	
	// 根据确定的长度创建用于存储数字的数组,
	int num1[len],num2[len];
	
	// 使用memset函数将内存数据置为0
	memset(num1, 0, sizeof(num1));
	memset(num2, 0, sizeof(num2)); 
	
	// 倒序的方式填充数字数组
	// str1和str2中存储的是数字字符,每个数字字符有其对应的ASCII码值,'0'字符ASCII码值为48
	// 因此要将字符转为int值,可以用str[i]-'0'或str[i]-48求字符差值的方式计算
	for(int i=0;i<len1;i++) num1[i] = str1[len1-i-1]-'0';
	for(int i=0;i<len2;i++) num2[i] = str2[len2-i-1]-48;
	// show(num1, len);
	// show(num2, len);
	
	// 加法的极限就是最大加数的长度+1,因此可以初步判断和的最大长度
	int num3[len+1];
	
	// 进行加运算
	// index为和数组的当前下标,最终也为和数组的实际长度-1
	// x为每位相加后的进位值
	int index = 0, x = 0;
	while(index < len)
	{
		// 对应的位求和并加上已存在的进位值
		num3[index] = num1[index] + num2[index] + x;
		// 两位相加大于10,需要进位
		if(num3[index] > 10)
		{
			// 求进位部分
			x = num3[index] / 10;
			// 取余
			num3[index] %= 10;
		}else x = 0;	// 没超过10,x为0
		index++;
	}
	
	// while循环完成,如果x不为0,说明最高位应赋值
	// x为0则说明和未突破加数的位数,index--以作为num3的实际长度
	if(x != 0)
	{
		num3[index] = x;
	}
	else index--;
	
	show(num3, index+1, false);
	
	return 0;
}

  

标签:index,高精度,int,num3,len,加法,flag,字符
From: https://www.cnblogs.com/exception999/p/18394808

相关文章

  • 微型直线导轨高精度运行的工作原理
    微型导轨是一种用于高精度定位和运动控制的传动装置,常用于微小化、高精密度化的机械设备中,如IC制造设备、半导体设备、高速移载的设备、精密测量、检测仪器、医疗设备、X-Ytable,以及高速皮带驱动的设备等小型化设备。微型导轨的构成相对复杂且精密,主要由导轨体、滑块、滚动体、返......
  • 信息学奥赛初赛天天练-82-NOIP2014普及组-完善程序-机器语言、汇编语言、高级语言、计
    1NOIP2014普及组基础题11以下哪个是面向对象的高级语言()A汇编语言BC++CFortranDBasic2TB代表的字节数是()A2的10次方B2的20次方C2的30次方D2的40次方3二进制数00100100和00010101的和是()A00101000B001010......
  • 高精度加法心得体会
        高精度加法是基于我们计算加法而设计的一种算法,在C++中我们创建的整数位数不能过大,当我们有大整数计算需求时,就要用到这个算法。 #include<iostream>#include<vector>usingnamespacestd;vector<int>add(vector<int>&A,vector<int>&B)//主体函数的功能是S......
  • 一种基于YOLOv10的高精度光伏板缺陷检测算法(原创自研),适用缺陷检测场景、小缺陷场景
     ......
  • [Python手撕]大数加法
    num1=input()num2=input()defcompare(num1,num2):foriinrange(len(num1)):ifnum1[i]>num2[i]:return0elifnum1[i]<num2[i]:return1return2#解析符号flag1=0flag2=0ifnum1[0]=="-......
  • 高精度,强扭矩,舵机让每一次转动都精准无误!
    深入探索科技的前沿,我们不得不聚焦于一款革新性的动力核心——高精度、强扭矩的舵机。这项技术杰作,以其精湛的工艺与尖端的技术,重新定义了精密控制的新标准,无论是翱翔天际的航模,还是穿梭于复杂任务中的机器人手臂,都因它而焕发出前所未有的活力与精准。核心技术解析:高精度舵机......
  • 软硬件全开源智能手表,可全面高精度采集生命体征数据,进行健康检测。(HealthyPi Move)
    HealthyPiMove是一款开放式硬件设备,可让您高精度地跟踪所有生命体征。它不仅仅是另一款带有心率监测器的智能手表,它还是手腕上的完整生命体征监测和记录设备,可以测量心电图(ECG)、光电容积脉搏波(PPG)、SpO₂、血压(基于手指)、EDA/GSR、心率变异性(HRV)、呼吸频率,甚至体温......
  • 信息学奥赛初赛天天练-76-NOIP2015普及组-基础题1-计算机存储、硬件系统、操作系统、
    NOIP2016普及组基础题111MB等于()A10000字节B1024字节C1000×1000字节D1024×1024字节2在PC机中,PENTIUM(奔腾)、酷睿、赛扬等是指()A生产厂家名称B硬盘的型号CCPU的型号D显示器的型号3操作系统的作用是()A把源程序译成目......
  • 自动驾驶轻地图 、无地图、高精度地图
    自动驾驶中的轻地图、无地图和高精度地图各有不同的设计原则和应用特点:1.**轻地图**:通常包含基本的道路信息,如车道线和标志。设计原则是平衡地图精度与存储和计算需求。流程包括生成、更新和维护地图数据。原理是用最简化的数据提供足够的导航支持。测试时主要关注地图数据的......
  • 高精度
    #include<cstring>#include<string>#include<algorithm>#include<cmath>#include<iostream>#include<vector>usingnamespacestd;booloperator<(vector<int>a,vector<int>b){if(a.size()!=b.size(......