算法之【仿竖式算法】

简介: 另类四则运算之大整数加减法:十进制的数值运算在计算机里都将转换成二进制的数值运算,而二进制的运算就是cpu中最根本的逻辑运算,最后再转化成十进制输出。这次介绍的方法是保留十进制的运算方式(小学生的列竖式计算),仅仅将每位数字转换成二进制。

另类四则运算之大整数加减法:

十进制的数值运算在计算机里都将转换成二进制的数值运算,而二进制的运算就是cpu中最根本的逻辑运算,最后再转化成十进制输出。这次介绍的方法是保留十进制的运算方式(小学生的列竖式计算),仅仅将每位数字转换成二进制。这种算法既在速度上有所提升,又能克服单个数据存储大小的限制。因此可以用来进行大整数的加减法(大整数通常指16位或32位以上整型数)。至于竖式计算的原理就不说了哦,不然有损大家的智商!

 

核心:模拟竖式计算,将大整数的每一位分开来存储与计算。

 

C语言完整程序:

//大整数加法:

#include

#include

char a[100],b[100];

int c[100],d[100];

int main()

{

         int m,n,i,j;

         scanf("%s %s",a,b);

         m=strlen(a);

         n=strlen(b);

         for(i=0;i<=m-1;i++)

         c[i]=a[m-1-i]-'0';

         for(i=0;i<=n-1;i++)

         d[i]=b[n-1-i]-'0';

         for(i=0;i<=99;i++)

         {

                   c[i]+=d[i];

                   if(c[i]>=10)

                   {

                            c[i]-=10;

                            c[i+1]+=1;

                   }

         }

         for(i=99;i>=0;i--)

         {

                   if(c[i]!=0)

                   {j=i;break;}

    }

    for(i=j;i>=0;i--)

    printf("%d",c[i]);

}


//大整数减法:

#include

#include

char a[100],b[100];

int c[100],d[100];

int main()

{

         int m,n,i,j;

         scanf("%s %s",a,b);

         m=strlen(a);

         n=strlen(b);

         for(i=0;i<=m-1;i++)

         c[i]=a[m-1-i]-'0';

         for(i=0;i<=n-1;i++)

         d[i]=b[n-1-i]-'0';

         for(i=0;i<=99;i++)

         {

                   c[i]-=d[i];

                   if(c[i]<0)

                   {

                            c[i]+=10;

                            c[i+1]-=1;

                   }

         }

         for(i=99;i>=0;i--)

         {

                   if(c[i]!=0)

                   {j=i;break;}

    }

    for(i=j;i>=0;i--)

    printf("%d",c[i]);

}

目录
相关文章
|
12月前
|
算法 搜索推荐 Shell
带你快速掌握使用c++写一些基本的算法
带你快速掌握使用c++写一些基本的算法
55 0
|
1月前
|
存储 算法 C++
【算法】粘木棍问题(C/C++)
【算法】粘木棍问题(C/C++)
|
3月前
|
算法
Manacher(马拉车)算法详解
该文章详细解释了Manacher算法,这是一种高效找出给定字符串最长回文子串的算法,通过在字符串中插入特殊字符构建新的字符串,并利用中心扩展策略来找出最长回文序列,时间复杂度为O(N),空间复杂度为O(N)。
|
5月前
|
监控 算法
一道算法题
一道算法题
19 0
|
算法
算法
一、算法 常见的图查找算法包括: 1. 深度优先搜索(DFS):从图中的一个节点开始,沿着一条路径一直深入直到无法再深入为止,然后回溯到上一个节点,继续深入其他路径,直到找到目标节点或遍历完所有节点。 2. 广度优先搜索(BFS):从图中的一个节点开始,先访问它的所有邻居节点,然后再依次访问邻居的邻居节点,直到找到目标节点或遍历完所有节点。 3. Dijkstra算法:用于在带权有向图中找到从一个节点到其他节点的最短路径。该算法通过不断更新节点的最短距离来逐步找到最短路径。 4. A*算法:类似于Dijkstra算法,但在计算最短路径时加入了启发式函数,用于估计目标节点的距离,从而加速搜索过程
393 0
|
JavaScript 算法 前端开发
vueDiff 算法解读
前言 在面试中谈到 vue 源码,一般都会扯扯 diff 算法,而这个 diff 又在网上传的神乎其神的,说是提升了页面更新性能,我们一起看看到底咋回事吧
|
存储 算法 测试技术
《算法》世界
一.什么是算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。一个算法必须具有:有穷性、确切性、输入项、输出项、可行性五个性质。
217 0
《算法》世界
|
机器学习/深度学习 算法 搜索推荐
C#算法大全(中)
今天有人想让我搞一期C#算法大全。算法就算法,安排上!
|
算法
超实用的算法小技巧
本篇文章我们将介绍一些超级实用的算法小技巧,灵活使用这些算法小技巧可以帮助我们更好的解决遇到的问题,让我们的时间复杂度,空间复杂度大大降低,有效的提高我们的编程能力。
149 0
|
人工智能 算法 搜索推荐
线性排序算法(1)
排序 选择排序(适用于线性排序) 思路,2层遍历 第一步:选择最小的元素,与第一个元素交换。 第二步:从第二个元素到最后一个元素,选择最小元素,与第二元素交换 完成前两步,第1第2元素已经排好序。
994 0