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

spark3.x 写入hudi报错

【代码】spark3.x 写入hudi报错。

W2484980893的博客 1578

开源 AHB不对称半桥反激电路设计(六)死区时间,谐振腔电流,谐振电感函数表达式

电流跌落可以使副边电流峰值和有效值降低,减小损耗,但如果开关管 S2 导通期间,谐振电流谐等于励磁电流,即副边电流A 点降至 0,会在原边变压器内形成环流,产生损耗,同时也不利于副边同步整流管驱动的正常工作,为了保证开关管 S2 导通期。在开关管 S1 和开关管 S2 均关断的死区时间内,谐振电流给原边开关管结电容和副边整流管结电容充放电,因此会引起开关 S1 关断瞬间电流跌落与开关 S2 关断瞬间电流震荡现象,受寄生参数影响原边谐振电流波形和副边电流波形如图。降到最低,变压器以最高效率向副边传递能量。

【Simon】的博客 1228

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

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

m0_62999279的博客 8587

告别GPS,用Sentinel-1数据+Python实战SBAS-InSAR监测城市地面沉降(保姆级教程)

本文详细介绍了如何利用Sentinel-1数据和Python实现SBAS-InSAR技术监测城市地面沉降。通过保姆级教程,从环境配置、数据获取到干涉处理、时序分析和形变反演,逐步解析全流程技术细节,帮助读者掌握毫米级精度的形变监测方法,并以上海陆家嘴区域为例展示实际应用效果。

weixin_32771907的博客 534

高精度乘法

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

wo_ai_luo_的博客 2349

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 323

C语言——高精度乘法

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

Stewie Lee的博客 3943

免费升级哨兵2号分辨率!用SRCNN深度学习模型实现10米→2.5米超分重建

本文详细介绍了如何利用SRCNN深度学习模型,将哨兵2号遥感影像的分辨率从10米免费提升至2.5米。文章提供了从数据准备、模型训练到部署应用的全流程实战指南,旨在通过AI应用技术,为农业监测、城市规划等领域提供更高精度的影像数据支持。

coffee的博客 523

高精度乘法基本算法

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

养猫的阿甘 1万+

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 803

SAP_MM模块库存概览俄罗斯报表简介

本文介绍了SAP MM模块中"库存概览俄罗斯报表"的功能与应用。该报表主要用于查看物料在不同库存地点和类型的库存情况,并满足俄罗斯当地法规要求。文章解释了"俄罗斯报表"可能指代本地化合规库存报表或客户自定义报表,详细说明了事务代码J3RFLVMOBVEDH的操作步骤,包括公司代码、物料编码、日期范围等查询条件,并解释了报表中各字段含义如期初期末库存数量与价值。最后强调在物料分类账处理完成后使用该报表可获得实际库存价值,为SAP用户提供了实用的库存管理参考。

我小时候很黑的博客 1087

高精度算法(乘法)

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

LAW2956的博客 2978

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

c语言高精度乘法

c语言高精度乘法

Yztttt_的博客 2659

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

qq_55149044的博客 1923

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

余额充值