高精度乘法(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

2026四款AI原生IDE实测:Trae、Qoder、CodeBuddy、Cursor能力边界深度解析

AI原生IDE正从代码编辑器演进为开发者智能工作流中枢,其核心在于对上下文理解、AST编辑意图建模与多模态任务调度的工程化实现。区别于传统插件式AI辅助,真正的AI原生IDE需具备知识库嵌入、符号图索引、操作链固化等底层能力,从而支撑Figma转码、N+1查询修复、跨语言迁移等复杂场景。Trae强调中文语境与企业规范的强绑定,Qoder聚焦AST级编辑轨迹预测,CodeBuddy通过IDE/插件/CLI三态划分控制权边界,Cursor则以云端Agent实现开发任务的时空并行。本文基于真实项目压测,揭示免费版

ctk87443的博客 2456

重装系统后,恢复Oracle的.ORA文件

前几天,系统莫名奇妙产生很多宏病毒,进而感染整个C盘,不得已,格式化后重装了系统。 重装系统之后,突然想到D盘中的oracle中很多数据没导出来备份,安装文件下有很多有用的.ORA文件,抱着死马当活马医的态度,居然成功了。 1、将原来D盘(D:\oracle\product\10.2.0\oradata\orcl)下的数据文件备份下其他盘,将D盘的oracle目录名改成oracle1。安装数据

zhanggnol的blog 5551

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

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

m0_62999279的博客 8587

cadence——MOS晶体管I-V特性曲线仿真

MOS晶体管I-V特性曲线仿真 目标:使用cadence绘制晶体管的I-V特性曲线(dc仿真) 流程: 新建原理图,将MOS管的栅极电压设为变量Vg,漏极电压设为变量Vd 打开ADEL,点击Variables——Copy From Cellview添加变量;并选择dc仿真,对Vd进行扫描 以Vg作为参变量进行仿真,点击Tools——Parametric Analysis进行设置 选择漏极电流作为输出,进行仿真即可得到I-V特性曲线 ...

skycmq的博客 1万+

高精度乘法

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

wo_ai_luo_的博客 2349

OCV/AOCV/SOCV的介绍和应用

library中的cell delay是在某个固定的PVT(operating condition)下仿真得出的。,cell的delay并不是一个固定值,而是一个随机值,遵循高斯分布或门特卡洛分布,在STA中用OCV来模拟这一『特征』。OCV全称on chip variation,用于描述不同管子间由于工艺偏差、电压降、温度变化引起的delay变化。,也用于描述工艺偏差引起的net厚度宽度的变化从而导致net的电容电阻变化。优点:设置起来比较简单粗暴,对于不那么先进的工艺可行!的影响,更贴合实际。

m0_61003348的博客 8980

Homebrew 必备软件清单:我的 macOS 开发环境搭建全记录

本文详细介绍了如何使用Homebrew在macOS上搭建高效的开发环境,包括基础配置、核心开发工具链、高效编码工具集等30个必备工具。通过Homebrew这一macOS缺失的包管理器,开发者可以一键安装命令行工具和GUI应用,大幅提升工作效率。文章还提供了日常维护命令和疑难问题解决方案,适合从新手到资深开发者的所有用户。

weixin_28836507的博客 353

C语言——高精度乘法

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

Stewie Lee的博客 3943

基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环simulink仿真

本文介绍了二极管钳位型三电平SVPWM技术在逆变器中的应用,通过控制IGBT的开关状态,将直流电压转换为三相交流电压,并采用钳位技术降低谐波失真,提高输出质量。文章还描述了基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环的Simulink仿真模型,该模型实现了并网控制,具有优异的性能,THD小于1%,适用于新手学习。仿真模型参数包括DC 800V、AC 380V、功率100kw,采用三电平NPC拓扑结构和SVPWM闭环控制策略,配备LCL滤波器,生成三电平波形,监测交流侧电压电流、有功功率和无功功率

2510_91195931的博客 465

高精度乘法基本算法

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

养猫的阿甘 1万+

AI Agent技能评测框架SkillsBench:从黑盒评估到白盒技能拆解

在人工智能领域,模型评估是衡量技术进展的核心环节。传统评测基准如GLUE、MMLU主要关注模型的通用认知能力,但实际工程应用中,AI Agent需要的是在复杂场景中协调多种能力的“职业技能”。SkillsBench创新性地将Agent能力进行原子化拆解,定义了理解规划、工具调用、推理决策、交互安全等技能维度,并通过领域专家构建的评测集确保生态效度。这一框架为Agent开发提供了精准的“度量衡”,使性能优化从经验驱动转向数据驱动,同时为不同模型和框架提供了公平比较的基础,推动了AI Agent生态从“野蛮生长

weixin_30530339的博客 388

图像去雾新思路:手把手教你复现DEA-Net中的“细节增强卷积”与PyTorch实现

本文详细解析了DEA-Net中的'细节增强卷积'(DEConv)与PyTorch实现,通过多分支差分卷积和重参数化技术,显著提升单图像去雾效果。文章从数学原理到代码实现,手把手指导复现这一创新架构,帮助开发者在保持轻量化的同时实现41dB以上的PSNR指标,适用于自动驾驶、遥感监测等关键领域。

weixin_30323631的博客 505

高精度算法(乘法)

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

LAW2956的博客 2978

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c语言高精度乘法

c语言高精度乘法

Yztttt_的博客 2659

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

qq_55149044的博客 1923

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

高精度乘法。输入两个正整数,求它们的积。【算法分析】类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时,必须进行错位相加,如图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、付费专栏及课程。

余额充值