练练

大数加法一般为小学生式的“竖式计算”要特别注意的是借位与进位的问题(先给看c++写法,我怕先看了python写法,会看不下去c++写法)这题还有要注意的是

1、同符号的话,直接加就行,最后再看正负号

2、不同的话则看,两个数的模的大小,在最后判断填补正负号,

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 10110;
char ch1[maxn],ch2[maxn];
int a[maxn],b[maxn],p,q,carry;
int c[maxn],car;
bool flag; void add(int len){//carry=0无进位,=1有进位
for(int i=0;i<len;i++){
int t=a[i]+b[i]+carry;
if(t>=10){
carry=1;
c[i]=t-10;
}
else {
carry=0;
c[i]=t;
}
}
if(carry==1)c[len]=1;
} int cmp(int l){
for(int i=l-1;i>=0;i--){
if(a[i]==b[i])continue;
if(a[i]>b[i]){
return 1;
}
else {
return -1;
}
}
return 2;
} int minu(int l1,int l2){//car=0无借位,=1有借位
if(l1==l2){
int r=cmp(l1);
if(r==2){
flag=true;
return 0;
}
else if(r==1){
for(int i=0;i<l1;i++){
a[i]-=car;
if(a[i]>=b[i]){
c[i]=a[i]-b[i];
car=0;
}
else{
c[i]=a[i]+10-b[i];
car=1;
}
}
}
else {
for(int i=0;i<l2;i++){
b[i]-=car;
if(b[i]>=a[i]){
c[i]=b[i]-a[i];
car=0;
}
else{
c[i]=b[i]+10-a[i];
car=1;
}
}
}
}
else {
if(l1>l2){
for(int i=0;i<l1;i++){
a[i]-=car;
if(a[i]>=b[i]){
c[i]=a[i]-b[i];
car=0;
}
else{
c[i]=a[i]+10-b[i];
car=1;
}
}
}
else {
for(int i=0;i<l2;i++){
b[i]-=car;
if(b[i]>=a[i]){
c[i]=b[i]-a[i];
car=0;
}
else{
c[i]=b[i]+10-a[i];
car=1;
}
}
}
}
} int main(){
int len1=0,len2=0,i,j;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>ch1>>ch2;
if(ch1[0]=='-')p=1;
if(ch2[0]=='-')q=1;
for(i=strlen(ch1)-1;i>=p;i--){
a[len1++]=ch1[i]-'0';
}
for(i=strlen(ch2)-1;i>=q;i--){
b[len2++]=ch2[i]-'0';
}
carry=0;
car=0;
flag=false;
int len=max(len1,len2);
if(p==0&&q==0){
add(len);
}
else if(p==1&&q==1){
add(len);
cout<<"-";
}
else {
minu(len1,len2);
if(len1>len2&&p==1&&q==0){
cout<<"-";
}
else if(len1<len2&&q==1&&p==0){
cout<<"-";
}
else if(len1==len2&&cmp(len1)==1&&p==1&&q==0){
cout<<"-";
}
else if(len1==len2&&cmp(len1)==-1&&p==0&&q==1){
cout<<"-";
}
}
if(ch1[0]=='0'&&ch2[0]=='0'){
cout<<"0"<<endl;
return 0;
}
if(flag){
cout<<"0"<<endl;return 0;
}
if(!carry)len--;
while(len>=0){
if(c[len]!=0)break;
len--;
}//cout<<len<<endl;
while(len>=0){
cout<<c[len];
len--;
}cout<<endl;
return 0;
}

上面写的可能有点烦,还没来的及精简,先看着

下面是python

a=int (input());
b=int (input());
print(a+b);

是不是感觉被耍了,嘿嘿

最新文章

  1. 浅谈Excel开发:十 Excel 开发中与线程相关的若干问题
  2. Linux之图形化shell------dialog
  3. http.Handler 与Go的错误处理
  4. nginx(四)初识nginx日志文件
  5. zabbix监控MySQL
  6. struts2 if标签示例
  7. 嵌入式Linux系统Bootloader启动调试技术(回想)
  8. C#使用checked关键字处理&quot;溢出&quot;错误
  9. JdbcTemplate学习笔记
  10. etcd raft如何实现成员变更
  11. Eclipse 改变字体大小,设置背景色
  12. Git~GitLab当它是一个CI工具时
  13. Java获取当前的时间
  14. 一大波 Android 刘海屏来袭,全网最全适配技巧!
  15. 国内外主流BI工具介绍和点评
  16. codeforces contest1082
  17. WSGI协议以及对服务器的影响
  18. mysqldump数据导出问题和客户端授权后连接失败问题
  19. elasticsearch和mysql排序问题
  20. VI/VIM 无法使用系统剪贴板(clipboard)?(Ubuntu&amp;Mac OS X已解决)

热门文章

  1. java基础精选题
  2. koa2基于stream(流)进行文件上传和下载
  3. SpringBoot 集成Jedis操作set
  4. 从零开发一款自己的小程序UI组件库(二)
  5. springboot整合websocket高级版
  6. Linux--shell重定向与文件处理命令--02
  7. Stream和方法引用
  8. .net软件开发脚本规范-SQL脚本标准
  9. Android 框架揭秘 --读书笔记
  10. iView表格行验证问题