高精度加法竖式模拟器
目录
思路:
解决办法:
完整代码:
大家好,这是一个高精度加法竖式模拟器。
输入格式看样例。
输入:
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;
}
麻烦点赞评论收藏吧~~~
高精度加法竖式模拟器相关推荐
- 加法的横式竖式教案c语言,列加法竖式教案
教学目标1.使学生掌握乘.除法竖式中各部分的名称,并理解各部分表示的意义.2.使学生初步掌握乘.除法竖式的书写方法,能用竖式正确计算乘.除法.3.培养学生的计算能力.教学重点竖式的计算方法及各部分表示 ...
- 【算法学习笔记】35.高精度 竖式乘法 SJTU OJ 1274
Description 输入a,b 输出a*b的竖式乘法,格式见样例. Sample Input1 11 9 Sample Output1 119 -- 99 Sample Input2 10 10 ...
- PAT甲级1023 Have Fun with Numbers:[C++题解]高精度加法和两个vector大小比较
文章目录 题目分析 题目链接 题目分析 使用高精度加法高精度加法板子求 这个数的两倍,存在一个vector中. 所谓高精度就是使用string来存大的数,然后模拟列竖式加法,结果一位一位压入数组vec ...
- 高精度加法(C++实现)
高精度加法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式加法计算 步骤 以下有顺序之分 数组清零 输入 获取长度 逆置 字符型数字转成对应的整型数字 计算并输出 ...
- 《信息学奥赛一本通》 高精度加法。输入两个正整数,求它们的和。
高精度加法.输入两个正整数,求它们的和. 算法分析 升级版代码 算法分析 输入两个数到两个变量中,然后用赋值语句求它们的和,输出.但是,我们知道,在C++语言中任何数据类型都有一定的表示范围.当两个被 ...
- 高精度加法(A+BProblemII)
好久没有写文章了,主要是近期开学上网课再加上刷题的缘故,日常有些忙碌. 话不多说,接下来是正题: 一切问题都是有源头的,在这里我就直接先放题了. 接下来我以代码+部分代码的解释+注意事项进行 ps:( ...
- C语言丨小 学 数 学(一):高精度加法
计算机,顾名思义,是用于高速计算的电子计算机器.它可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.[1]但是,计算机的功能毕竟 ...
- 试解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 ...
- 高精度加法【c++实现】
其他高精度算法如下: 高精度减法[c++实现] 高精度乘法[c++实现] 高精度除法[c++实现] ------------------------------ 说在前面: 众所周知 int,long ...
最新文章
- 取出json中的数据php,怎么从Json中取出数据放到一个新组中
- 机器学习与深度学习常见面试问题与答案
- android关闭触摸声音,如何在Android中以编程方式禁用触摸时的振动和声音?
- POJ2528 计算可见线段(线段树)
- windows文件路径 正则表达式_Windows非常实用的四款软件
- js判断数组里是否有重复元素的方法
- C# IOCP完成端口模型(简单实用高效)
- php读取js为文本,PHP / JS文本差异
- Git教程——回到从前 (checkout 针对单个文件)
- Terminal终端命令(全)
- 计算机快捷键大全列表6,快捷键大全excel
- rust相框加载图片代码_用代码为相片加相框的方法
- 使用R语言并行提取栅格数据
- 【linux】Ubuntu 14.04 smba服务器的配置
- Spring是什么?干什么的?怎么用?
- 分析:全球千亿美元市值IT企业榜单及点评
- ClickHouse使用实践与规范
- 分享自己做的一个词典小软件
- java电话门禁考勤系统_基于智能门禁考勤系统研究
- 五分钟带你实战linux 创建组用户,创建新用户,修改用户组属性,修改权限的应用