UVA713 高精度(1)+相加+去前导0/后缀0
来源:互联网 发布:多头螺纹怎样用g92编程 编辑:程序博客网 时间:2024/06/11 00:19
1题意
假设没有前导0和后缀0,简单相加,再去除前面的和后面的0,输出。
2分析
本题好像对0要求不严格,学习一下代码一中的去前导0和后缀0,以及合理用二维数组的方式。
3
代码一
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int maxn=1010;int num[4][maxn]; //num[0][maxn]:temp; num[1][maxn]:num1; num[2][maxn]:num2; num[3][maxn]:sum;char str[maxn];void Read(int cur){ cin>>str; int len=strlen(str); //去前导0,char []导入int数组: int bj=0; num[0][0]=0; for(int i=0;i<len;i++){ if(str[i]!='0') bj=1; if(bj) num[0][++num[0][0]]=str[i]-'0'; } bj=0; //去后面的0,同时正常的反向(用于低位相加向右进位): for(int i=num[0][0];i>=1;i--){ if(num[0][i]!=0) bj=1; if(bj) num[cur][++num[cur][0]]=num[0][i]; } //对于本题:反向转换 for(int j=num[cur][0],i=1;i<j;i++,j--){ bj=num[cur][j]; num[cur][j]=num[cur][i]; num[cur][i]=bj; } //for(int i=num[cur][0];i>=1;i--) cout<<num[cur][i];}void Add(){ num[3][0]=max(num[1][0],num[2][0]); for(int i=1;i<=num[3][0];i++){ num[3][i]+=(num[1][i]+num[2][i]); if(num[3][i]>9){ num[3][i]%=10; num[3][i+1]++; } } if(num[3][num[3][0]+1]!=0) num[3][0]++;//因为a+b,下限是t=max(a的位数,b的位数),上限是t+1;}void Print(){ //去掉因为相加而产生的新的前导0: int bj=0; for(int i=1;i<=num[3][0];i++){ if(num[3][i]!=0) bj=1; if(bj) cout<<num[3][i]; } cout<<endl;}int main(){ int kk; scanf("%d",&kk); while(kk--){ memset(num,0,sizeof(num)); Read(1); Read(2); Add(); Print(); }}
代码二
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int maxn=1010;char str1[maxn];char str2[maxn];int num1[maxn];int num2[maxn];int sum[maxn];int len1,len2,len3;void Add(){ int i; for(i=0;i<(len1<len2?len2:len1);i++){ sum[i]+=(num1[i]+num2[i]); if(sum[i]>9){ sum[i]=sum[i]-10; sum[i+1]++; } } if(sum[i]!=0) len3=i+1; else len3=i;}int main(){ int kk; scanf("%d",&kk); while(kk--){ cin>>str1>>str2; len1=strlen(str1); len2=strlen(str2); memset(num1,0,sizeof(num1)); memset(num2,0,sizeof(num2)); memset(sum,0,sizeof(sum)); for(int i=0;i<len1;i++) num1[i]=str1[i]-'0'; for(int i=0;i<len2;i++) num2[i]=str2[i]-'0'; Add(); int bj=0; int endd=len3; for(int j=len3-1;j>=0;j--){ if(sum[j]!=0) bj=1; if(bj){ endd=j+1; break; } } bj=0; for(int i=0;i<endd;i++){ if(sum[i]!=0) bj=1; if(bj) cout<<sum[i]; } cout<<endl; } return 0;}
0 0
- UVA713 高精度(1)+相加+去前导0/后缀0
- java 去前导0
- 加前导0, 去前导0
- 删除前导0后缀0的几种方法
- 求高精度幂,Java BigDecimal 去前导零和后导零
- 前导0增加
- 加前导 0
- 前导0函数
- 去除前导0函数
- 前导0 的数字
- (高精度幂,去前导零和尾部零)Exponentiation -- HDOJ
- Plsql开发html报表Html 复制到excel不去前导0
- ABAP 去前导零/加前导零
- smartforms不显示前导0
- 纠结的ALV前导0
- 字段前导“0”的处理
- UVA10523 高精度(2)+相乘、相加+注意进位和0的情况
- 高精度 两小数相加
- 算法:两个单链表生成相加链表
- HDU 2795 Billboard(线段树)
- 一天一条Linux指令-tsort
- 设计原则之最少知识原则 javascript
- 感知器与线性单元
- UVA713 高精度(1)+相加+去前导0/后缀0
- Android--RecyclerView学习
- Ajax模拟百度搜索框的自动补全功能
- 常用设计模式
- Camera2.0 控制摄像头拍照
- MySql错误处理
- oracle笔记
- 利用Cmake 将最新版本OBS编译成windows版本。
- 带你重新认识Activity的方方面面