目录

思路:

解决办法:

完整代码:


大家好,这是一个高精度加法竖式模拟器。

输入格式看样例。

输入:
12345 12345

思路:

按照手算竖式的方法来。

可是这样的话,一不小心就会变成这样:

所以,

得让数组倒序存储。

代码片段:

for(int i=0;i<lena/2;i++)        //将数字逆序存储
{int temp=a[i];a[i]=a[lena-i-1];a[lena-i-1]=temp;
}for(int i=0;i<lenb/2;i++)
{int temp=b[i];b[i]=b[lenb-i-1];b[lenb-i-1]=temp;
}

问题又来了,进位往哪存呢?

例如这种情况:

这显然是不对的。

为了解决这个问题,代码需要这样写:

int c[1001]={}; //进位

那么,加法进位值的代码就可以这么写:


for (int i = 0; i < max(lena,lenb); i++)//进位
{c[i+1]=(a[i]+b[i])/10%10;
}

那如果a[i]+b[i]+c[i]>=10呢?

所以,代码还需要改进,例如这样(我让结果也在这个模块里运算了):

for (int i = 0; i < max(lena,lenb); i++)//进位
{c[i+1]=(a[i]+b[i])/10%10;
}
for (int i = 0; i <= max(lena,lenb)+1; i++)
{if ((a[i]+b[i])%10+c[i]>=10){s[i]=(a[i]+b[i])%10+c[i]-10;c[i+1]++;}else{s[i]=(a[i]+b[i])%10+c[i];}
}

别忘了,这可是个竖式生成器,得有输出!

可是setw()不能应用在数组上,怎么办呢?

解决办法:

    for (int i = 0; i < 30-count; i++)/*实现与setw()相近的功能*/{cout<<" ";}

在加亿点点细节······

完整代码:

#include<bits/stdc++.h>
using namespace std;
void shushijia(string a1,string b1){//需要优化int a[1001]={},b[1001]={},c[1001]={},s[1002]={};int lena=a1.length(),lenb=b1.length();for(int i = 0; i < lena; i++){ //string转换为int[array]a[i]=a1[i]-'0';}for(int i = 0; i < lenb; i++){b[i]=b1[i]-'0';}for(int i=0;i<lena/2;i++)        //将数字逆序输出{int temp=a[i];a[i]=a[lena-i-1];a[lena-i-1]=temp;}for(int i=0;i<lenb/2;i++)        //将数字逆序输出{int temp=b[i];b[i]=b[lenb-i-1];b[lenb-i-1]=temp;}cout<<setw(30)<<a1;cout<<endl;cout<<"+"<<setw(29)<<b1;cout<<endl;for (int i = 0; i < max(lena,lenb); i++)//进位{c[i+1]=(a[i]+b[i])/10%10;}for (int i = 0; i <= max(lena,lenb)+1; i++){if ((a[i]+b[i])%10+c[i]>=10){s[i]=(a[i]+b[i])%10+c[i]-10;c[i+1]++;}else{s[i]=(a[i]+b[i])%10+c[i];}}cout<<"--------------------------------"<<endl;int count;if (a[max(lena,lenb)]+b[max(lena,lenb)]>=10){count=max(lena,lenb)+1;}else{count=max(lena,lenb);}for (int i = 0; i < 30-count; i++)/*实现与setw()相近的功能*/{cout<<" ";}if (a[lena-1]+b[lenb-1]>=10){for (int i = max(lena,lenb);i>=0;i--){   cout<<s[i];}}else{for (int i = max(lena,lenb)-1; i>=0; i--){ cout<<s[i];}}
}
int main(){string a1,b1;cin>>a1>>b1;if(a1.length()>b1.length()){shushijia(a1,b1);}else{shushijia(b1,a1);}return 0;
}

麻烦点赞评论收藏吧~~~

高精度加法竖式模拟器相关推荐

  1. 加法的横式竖式教案c语言,列加法竖式教案

    教学目标1.使学生掌握乘.除法竖式中各部分的名称,并理解各部分表示的意义.2.使学生初步掌握乘.除法竖式的书写方法,能用竖式正确计算乘.除法.3.培养学生的计算能力.教学重点竖式的计算方法及各部分表示 ...

  2. 【算法学习笔记】35.高精度 竖式乘法 SJTU OJ 1274

    Description 输入a,b 输出a*b的竖式乘法,格式见样例. Sample Input1 11 9 Sample Output1 119 -- 99 Sample Input2 10 10 ...

  3. PAT甲级1023 Have Fun with Numbers:[C++题解]高精度加法和两个vector大小比较

    文章目录 题目分析 题目链接 题目分析 使用高精度加法高精度加法板子求 这个数的两倍,存在一个vector中. 所谓高精度就是使用string来存大的数,然后模拟列竖式加法,结果一位一位压入数组vec ...

  4. 高精度加法(C++实现)

    高精度加法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式加法计算 步骤 以下有顺序之分 数组清零 输入 获取长度 逆置 字符型数字转成对应的整型数字 计算并输出 ...

  5. 《信息学奥赛一本通》 高精度加法。输入两个正整数,求它们的和。

    高精度加法.输入两个正整数,求它们的和. 算法分析 升级版代码 算法分析 输入两个数到两个变量中,然后用赋值语句求它们的和,输出.但是,我们知道,在C++语言中任何数据类型都有一定的表示范围.当两个被 ...

  6. 高精度加法(A+BProblemII)

    好久没有写文章了,主要是近期开学上网课再加上刷题的缘故,日常有些忙碌. 话不多说,接下来是正题: 一切问题都是有源头的,在这里我就直接先放题了. 接下来我以代码+部分代码的解释+注意事项进行 ps:( ...

  7. C语言丨小 学 数 学(一):高精度加法

    计算机,顾名思义,是用于高速计算的电子计算机器.它可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.[1]但是,计算机的功能毕竟 ...

  8. 试解PTA《20211122-函数基础练习》,涉及 高精度加法 和 10进制转换成2-16进制问题,有需要的同学来看看吧;

    目录 一.前言 二.例题部分 2.1.进制转换 2.1.1.题解1 2.1.2.题解2 2.2. 函数返回一个整数的反序数 (20 分) 2.2.2 题解 2.3. 大整数A+B (10 分) 2.3 ...

  9. 高精度加法【c++实现】

    其他高精度算法如下: 高精度减法[c++实现] 高精度乘法[c++实现] 高精度除法[c++实现] ------------------------------ 说在前面: 众所周知 int,long ...

最新文章

  1. 取出json中的数据php,怎么从Json中取出数据放到一个新组中
  2. 机器学习与深度学习常见面试问题与答案
  3. android关闭触摸声音,如何在Android中以编程方式禁用触摸时的振动和声音?
  4. POJ2528 计算可见线段(线段树)
  5. windows文件路径 正则表达式_Windows非常实用的四款软件
  6. js判断数组里是否有重复元素的方法
  7. C# IOCP完成端口模型(简单实用高效)
  8. php读取js为文本,PHP / JS文本差异
  9. Git教程——回到从前 (checkout 针对单个文件)
  10. Terminal终端命令(全)
  11. 计算机快捷键大全列表6,快捷键大全excel
  12. rust相框加载图片代码_用代码为相片加相框的方法
  13. 使用R语言并行提取栅格数据
  14. 【linux】Ubuntu 14.04 smba服务器的配置
  15. Spring是什么?干什么的?怎么用?
  16. 分析:全球千亿美元市值IT企业榜单及点评
  17. ClickHouse使用实践与规范
  18. 分享自己做的一个词典小软件
  19. java电话门禁考勤系统_基于智能门禁考勤系统研究
  20. 五分钟带你实战linux 创建组用户,创建新用户,修改用户组属性,修改权限的应用

热门文章

  1. 百度云点播VOD服务
  2. INET的定制使用OMNET++
  3. java scel_使用java将搜狗词库.scel文件转化为.txt文件
  4. 计算机数据防泄露,防勒索病毒分案分析
  5. 互联互通社区祝大家中秋节快乐!
  6. 趣味闹钟,社区化讨论
  7. 清华校长送给毕业生的五段话
  8. java session时间_java session时长问题,java设置session超时时间实例
  9. C#ListView控件的相关用法
  10. 【TARS】TarsWeb 说明