高精度乘法(Trachtenberg速算法)

特拉亨伯格(五年级版本) 例子:算 15×9 补个0:0 1 5 从右往左算: 第1位:10-5=5 ➔ 5 第2位:9-1=8,加邻居5 ➔ 8+5=13(写3,进位1) 第3位:0变成9(因为首位要减1),加进位1 ➔ 9+1=10(写0,进位1) 首位减1:1-1=0,加进位1 ➔ 1 结果:135(15×9=135,搞定!例子:算 23×12 补个0:0 2 3 从右往左算: 第1位:3×2=6 ➔ 6 第2位:2×2+3=7 ➔ 7 第3位:0×2+2=2 ➔ 2 结果:276(试试看,是不是很快? 阅读详情

一.介绍:

Trachtenberg速算法:(转载)

二.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-4
#define PI acos(-1.0)
#define ll long long int
using namespace std;

struct node
{
    int pos;
    char num;
};

const int M = 1010;
struct node a[M], b[M];
int len = 0;
int len1 = 0;
int len2 = 0;
int ans[M * M];

void Print()
{
    int i = len;
    while(!ans[i])
        i--;
    for(; i >= 0; --i)
        printf("%d", ans[i]);
    printf("\n");
}

void Trachtenberg()
{
    while(b[0].pos != len1 + 1)
    {
        for(int i = 0; i < len2; ++i)
        {
            if(b[i].pos == 0)
                ans[len] += ((b[i].num - '0') * (a[len1 - 1].num - '0')) % 10;
            else if(b[i].pos == len1)
                ans[len] += ((b[i].num - '0') * (a[0].num - '0')) / 10;
            else if(b[i].pos > 0 && b[i].pos < len1)
                ans[len] += ((b[i].num - '0') * (a[len1 - b[i].pos - 1].num - '0')) % 10 + ((b[i].num - '0') * (a[len1 - b[i].pos].num - '0')) / 10;
            b[i].pos++;
        }
        ans[len + 1] += ans[len] / 10;
        ans[len] %= 10;
        len++;
    }
    Print();
}

void Scan(string s1, string s2)
{
    len1 = s1.size();
    len2 = s2.size();
    for(int i = 0; i < len1; ++i)
        a[i].num = s1[i];
    for(int i = 0; i < len2; ++i)
        b[i].num = s2[i];
    for(int i = len2 - 1; i >= 0; --i)
    {
        if(i == len2 - 1)
            b[i].pos = 0;
        else
            b[i].pos = b[i + 1].pos - 1;
    }
}

int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    Scan(s1, s2);
    if(a[0].num == '0' && len1 == 1 || b[0].num == '0' && len2 == 1)
        printf("0\n");
    else
        Trachtenberg();
    return 0;
}

 

高精度乘法(C/C++) 高精度乘法算法:原理分析+细节注意+代码解析 阅读详情

相关推荐

【算法之路】高精度算法(实现加减乘除)

介绍高精度算法中的加减乘除实现:附AC代码和思路

m0_74044018的博客 3267

速算口诀

十几乘十几: 口诀:头乘头,尾加尾,尾乘尾。 例:12×14=? 解: 1×1=1    2+4=6    2×4=8     12×14=168 注:个位相乘,不够两位数要用0占位。   2.头相同,尾互补(尾相加等于10): 口诀:一个头加1后,头乘头,尾乘尾。 例:23×27=? 解:2+1=3   2×3=6   3×7=21     23×27=621 注:个位相乘,不够两位数要用0占位...

javajavami的博客 304

C++算法之高精度计算(乘法)

高精度乘法通过字符串处理、数组存储和逐位计算的方式,实现了大整数之间的乘法运算。这种方法虽然效率不如硬件支持的整数乘法,但在处理超出标准数据类型范围的大数时非常有用。

shishuaiq的博客 3018

【经验分享(续篇)】Trachtenberg system(特拉亨伯格速算系统)

之前有篇文章简单地介绍了Trachtenberg系统的乘法计算方法,地址在这里。针对一些特定的数字,Trachtenberg还发展出了更快的计算方法。 先来介绍乘数为11的速算方法。它的计算规则我们可称之为“邻居法则”: 从右至左,把每一位数和其右侧相邻位置的数字相加,取其个位。若所得值大于9,则将其十位则带到下一位计算(这个进位最多也只有1)。 所以以后碰到和11相乘,直接写结果就成了,举...

weixin_33922670的博客 3993

CATIA CAA 二次开发去除面内开孔

测试模型: 代码说明:以下代码在拓扑级去除Face的内部loop,更改后的Body通过oispBody参数输出。主要使用CATSmartBodyDuplicator拓扑操作实现 HRESULT CAAStarterCmd::RemoveHoleOnFace(CATBody_var &ispBody,CATBody_var &oispBody){ CATLISTP(CATCell)olistFace; ispBody->GetAllCells(olistFace,2); CATF

weixin_45445751的博客 2265

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1081

高精度算法——高精度乘法

高精度乘法,会比高精加法、减法稍微难那么一点点,主要是乘法要用到,高精度加法去做,也就是说,如果高精度加法没有学好,高精度乘法也就会有点难理解了,但是吧,你既然搜到了并点到了这里,就说明你已经会高精度加法了,既然你已经会高精度加法了,就说明你知道为什么要用高精度了,就不再多说废话了。 顺便把这题完整的代码也附上把:...

m0_62999279的博客 8587

生物信息学新手必备:5分钟搞定GEO补充数据下载(含西柚云代理配置)

本文为生物信息学新手提供了快速下载GEO数据库补充数据的完整方案。核心在于解析GEO文件存储逻辑,构造正确的FTP下载链接,并利用云端代理服务(如西柚云)解决国内访问NCBI速度慢、易中断的问题。通过分步教程,用户无需命令行即可在5分钟内稳定获取大型测序文件,极大提升数据获取效率。

weixin_28314575的博客 637

高精度乘法

我们就可以用 C++ 语言来模拟这个竖式减法的过程。我们可以考虑利用 C++ 的数组来存储对应数据,假设用数组 A 存储被减数 856 的每一位,具体来说就是 A1 存储个位 6,A2 存储十位 5,A3存储百位 8;类似数组 A 的结构,使用数组 B 存储减数 25;类似数组 A 的结构,使用数组 C 来存储对应的乘积 21400。两数相加的结果就如图 2 所示。这样理论上来说,我们就可以计算无限大的数据。如上图 2 所示,下表表示对应的存储方式。

wo_ai_luo_的博客 2349

拌合楼软件开发(24)接收微信消息生成车辆计划

【摘要】针对拌合站客户群体文化程度不高、习惯微信群沟通的业务场景,提出通过企业微信机器人实现微信对话下单的解决方案。核心是利用WorkTool工具的消息回调机制:1)配置接收消息的API接口;2)解析JSON格式的对话数据,筛选@机器人的有效消息;3)采用*号分隔符提取订单信息并进行校验;4)建立微信昵称与客户系统的映射关系。方案解决了传统系统登录门槛高的问题,但需注意群名唯一性、多系统对接及客户身份识别等关键问题。全文重点阐述技术实现逻辑而非具体代码。

morsth的博客 1045

MT25QL256完整操作指南:从ID读取到4KB扇区擦除(附华大SPI例程)

本文提供了MT25QL256 NOR FLASH在华大MCU上的完整驱动开发指南。内容涵盖从SPI初始化、器件ID读取、状态寄存器查询,到核心的页编程和4KB扇区擦除操作,并分享了构建健壮驱动框架、处理跨页写入及常见调试问题的实战经验。

tt34567的博客 886

C语言——高精度乘法

这里考虑结果的位数是最低位数,由于数组的特性,两个数字的最低位在数组中是作为第零位的,而且在数组中两个数的每一位相当于之前都是减少了一位,如果是10 * 10两个两位数相乘理论上结果是三位,但是如果将两数字的位数相加作为结果的位数,那结果就是四(2 + 2)位数,这样就不对了,但是由于数组的特性,将两数字位数相加改成两数字当前索引相加就可以了,10 * 10,索引相加是(1 + 1) = 2,而二作为索引是3位数,结果是三位数,这样就对了。这里,我们有两个数n1和n2,它们分别以字符串的形式存储,

Stewie Lee的博客 3943

基于simulink的多能源系统协同与能源互联网的电网系统场景实例:虚拟电厂(VPP)中电网与储能集群的协同控制

本文详细介绍了使用Simulink构建虚拟电厂(VPP)与储能集群协同控制系统的完整建模过程。主要内容包括:1) VPP系统架构设计;2)分步骤建模过程,涵盖虚拟电厂系统创建、储能单元与集群建模、VPP控制器设计(核心)以及协同控制场景仿真;3)性能分析与典型应用场景。通过混合整数线性规划优化调度和智能指令分解策略,实现了VPP参与电力市场交易、电网调频调峰等功能,验证了系统在提升可再生能源消纳率(96%)、降低电网峰谷差(35%)等方面的优异性能。该建模方法为能源互联网中的分布式资源聚合与协同控制提供了实

xiaoheshang_123的博客 470

高精度乘法基本算法

高精度乘法基本算法,两段,其实两段是同一种方法,第二段稍做优化。只是将计算结果显示到屏幕上。代码片段一(初学请参考这段代码):#include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; using namespace std; //定义常量,常量值根据需要修改,此算法为完全根据乘法竖式模拟算法,没有优化 /...

养猫的阿甘 1万+

扣子Coze智能体万字教程:从入门到精通,一文掌握AI工作流搭建

智能体 = 角色设定 + 提示词 + 变量输入一个好提示词的核心是结构、风格和复用性创建后可以一键发布成网页应用、对话助手整个过程0代码,只靠配置,人人可学,人人可用四、进阶一:理解「工作流」的威力如果你已经用扣子创建了几个简单的智能体,比如写个爆款小红书文案、生成一段短视频脚本,那恭喜你已经入门。但如果你还停留在“一个智能体 = 一段提示词”的层级,你离真正的智能体生产力革命,还差一步:学会搭建“工作流”——让多个大模型自动协同完成任务。

互联网架构师笔记 3502

mjlab MuJoCo 人形机器人强化学习入门教程(一)安装配置使用

mjlab是融合IsaacLab API与MuJoCo物理引擎的强化学习工具,提供轻量级GPU加速仿真方案。当前处于测试阶段,支持Linux系统(推荐)和有限macOS支持。核心优势包括:1)直接集成MuJoCo Warp实现裸机性能;2)保留IsaacLab成熟的RL抽象层;3)简化安装流程。与IsaacLab相比更专注于MuJoCo生态,适合刚体机器人RL研究。文档包含详细安装指南、平台兼容性说明、与IsaacLab的API差异对比及常见问题解答。项目正在积极开发中,欢迎社区贡献和反馈。

2506_90492529的博客 1997

高精度算法(乘法)

在本篇文章中会详细介绍高精度乘法,希望对您有用

LAW2956的博客 2978

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c语言高精度乘法

c语言高精度乘法

Yztttt_的博客 2659

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++实现高精度乘法(高精度乘积)

C++实现高精度乘法(高精度乘积)

qq_55149044的博客 1923

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

高精度乘法入门详解(高精乘高精)

高精度乘法。输入两个正整数,求它们的积。【算法分析】类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时,必须进行错位相加,如图3、图4。 分析c数组下标的变化规律,可以写出如下关系式:ci = c’i +c”i +…由此可见,c i跟a[i]*b[j]乘积有关,跟上次的进位有关,还跟原c i的值有关,分析下标规律,有c[i+j-1]= a[i]*b[j]+ x

lzoi_hmh的博客 3万+

C++基础算法②——高精度乘除法计算

高精度乘低精度、高精度乘高精度、高精度除低精度

博樽 3120

C++知识点总结(5):高精度乘法

【新手能看懂】带你一览高精度乘法的典型题目,还有“本课收获”哦~支持一下吧,后续还会持续更新哦~

joe_g12345的博客 2310

基础算法-高精度乘法

高精度除法

每天进步一点点! 1845

c++高精度乘法(大数乘法)

高精度乘法 对于计算机无法用普通数据类型(如:longint)表示的大整数进行乘法运算,称为高精度乘法。 步骤 高精度乘法主要包括以下几个要求及过程 1、为了获取输入数字的每一位的值,包括个位,十位等,输入整型的数据是无法满足的,因此,输入数据必须为字符串形式。 2、字符串转整型,存储每一位值于数组中 3、高精度乘法,重点!通过模拟人手工计算的方法,进位计算。 4、整型转字符串进行显示 代码 以下...

algorithm learning blog 1万+

(续)高精度算法——乘除

讲到高精度乘法,其实大致和高精度加法相同,不同的是,高精度加法只是对两个数相加,但是高精度减法需要对多个数相加,原因是需要将一个数的个位到最高位分别与另一个数的个位到最高位相乘,再将这些数相加。由上图示例,对24567这个数,先用2和除数36试除,得到商为0,用ans数组存下,再用24,商也是0,再用245除以36时,商为6,依次进行,核心代码就是起到这么一个作用。由于i和j是从0开始的,所以就有i位的数与j位的数相乘后的数会放在i+j位上,这就是核心代码关键难理解的。下面先看高精度乘法的核心代码。

2301_80314483的博客 1280
上一篇: Floating-Point Numbers( UVA - 11809,计算机浮点数模拟)
下一篇: Leading and Trailing (LightOJ - 1282,求n^k 的前三位 和 后三位)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值