是不是我没有理解这个题目,就是A+B高精度加减,为什么我的代码有问题呢?下面是自己写的代码,还是存在问题!

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxx=1e5+10;
char s1[maxx],s2[maxx];
char s11[maxx],s12[maxx];
char s3[maxx];
int a[maxx],b[maxx];
int c[maxx];
int compare(char c1[],char c2[]){int n=strlen(c1);int m=strlen(c2);if(n!=m)return n>m;for(int i=0;i<n;i++){return c1[i]>c2[i];}return 1;
}
int main(){int t;cin>>t;while(t--){scanf("%s %s",&s1,&s2);int n=strlen(s1);int m=strlen(s2);int flag1=0,flag2=0,flag=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));if(s1[0]=='+'){for(int i=1;i<n;i++){s11[i]=s1[i];}flag1=1;}if(s2[0]=='+'){for(int i=1;i<m;i++){s12[i]=s2[i];}flag2=1;}if(s1[0]=='-'){for(int i=1;i<n;i++){s11[i]=s1[i];}flag1=2;}if(s2[0]=='-'){for(int i=1;i<m;i++){s12[i]=s2[i];}flag2=2;}if(flag1==0&&flag2==0){for(int i=0;i<n;i++){a[n-i]=s1[i]-'0';}for(int i=0;i<m;i++){b[m-i]=s2[i]-'0';}int len=max(n,m)+1;for(int i=0;i<len;i++){int v=a[i]+b[i];if((v+c[i])>=10){c[i+1]=(c[i]+v)/10;c[i]=(c[i]+v)%10;}else{c[i]+=v;}}while(c[len]==0&&len>0)len--;for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}else if(flag1==1&&flag2==1){for(int i=1;i<n;i++){a[n-i]=s11[i]-'0';}for(int i=1;i<m;i++){b[m-i]=s12[i]-'0';}int len=max(n-1,m-1)+1;for(int i=0;i<len;i++){int v=a[i]+b[i];if((v+c[i])>=10){c[i+1]=(c[i]+v)/10;c[i]=(c[i]+v)%10;}else{c[i]+=v;}}while(c[len]==0&&len>0)len--;for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}else if(flag1==1&&flag2==2){char c1[maxx],c2[maxx];for(int i=1;i<n;i++)c1[i-1]=s11[i];for(int i=1;i<m;i++)c2[i-1]=s12[i];if(!compare(c1,c2)){flag=1;strcpy(s3,c1);strcpy(c1,c2);strcpy(c2,s3);}for(int i=0;i<n-1;i++){a[n-i-1]=c1[i]-'0';}for(int i=0;i<m-1;i++){b[m-i-1]=c2[i]-'0';}int len=max(n-1,m-1);for(int i=1;i<=len;i++){if(a[i]<b[i]){a[i+1]--;a[i]+=10;}c[i]=a[i]-b[i];}while(c[len]==0&&len>0)len--;if(flag==1)cout<<"-";for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}else if(flag2==1&&flag1==2){char c1[maxx],c2[maxx];for(int i=1;i<n;i++)c1[i-1]=s11[i];for(int i=1;i<m;i++)c2[i-1]=s12[i];if(!compare(c1,c2)){flag=1;strcpy(s3,c1);strcpy(c1,c2);strcpy(c2,s3);}for(int i=0;i<n-1;i++){a[n-i-1]=c1[i]-'0';}for(int i=0;i<m-1;i++){b[m-i-1]=c2[i]-'0';}int len=max(n-1,m-1);for(int i=1;i<=len;i++){if(b[i]<a[i]){b[i+1]--;b[i]+=10;}c[i]=b[i]-a[i];}while(c[len]==0&&len>0)len--;if(flag==1)cout<<"-";for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}else if(flag1==2&&flag2==2){for(int i=1;i<n;i++){a[n-i]=s11[i]-'0';}for(int i=1;i<m;i++){b[m-i]=s12[i]-'0';}int len=max(n-1,m-1)+1;for(int i=0;i<len;i++){int v=a[i]+b[i];if((v+c[i])>=10){c[i+1]=(c[i]+v)/10;c[i]=(c[i]+v)%10;}else{c[i]+=v;}}while(c[len]==0&&len>0)len--;cout<<"-";for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}else if(flag1==0&&flag2==2){char s[maxx];for(int i=1;i<m;i++){s[i-1]=s12[i];}if(!compare(s1,s)){flag=1;strcpy(s3,s1);strcpy(s1,s);strcpy(s,s3);}for(int i=0;i<n;i++){a[n-i]=s1[i]-'0';}for(int i=0;i<m-1;i++){b[m-i-1]=s[i]-'0';}int len=max(n,m-1);for(int i=1;i<=len;i++){if(a[i]<b[i]){a[i+1]--;a[i]+=10;}c[i]=a[i]-b[i];}while(c[len]==0&&len>0)len--;if(flag==1)cout<<"-";for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}else if(flag1==2&&flag2==0){char s[maxx];for(int i=1;i<n;i++){s[i-1]=s11[i];}if(!compare(s2,s)){flag=1;strcpy(s3,s);strcpy(s,s2);strcpy(s2,s3);}for(int i=0;i<n-1;i++){a[n-i-1]=s[i]-'0';}for(int i=0;i<m;i++){b[m-i]=s2[i]-'0';}int len=max(n-1,m);for(int i=1;i<=len;i++){if(b[i]<a[i]){b[i+1]--;b[i]+=10;}c[i]=b[i]-a[i];}while(c[len]==0&&len>0)len--;if(flag==1)cout<<"-";for(int i=len;i>0;i--){cout<<c[i];}cout<<endl;}}return 0;
}

poj2756(高精度加减)相关推荐

  1. 大数高精度加减、乘除、开根(C++版全套最详细、最易懂)

    大数高精度加减.乘除.开根 一.前面铺垫 二.加法 三.减法 四.乘法 五.除法 六.开根(待完善)   大数高精度加减乘除主要用在超过long型的数字计算(比如1000位数), 最基本的思路就是换成 ...

  2. 高精度加减乘法小程序

    复习高精度玩,写了个非常直观的加减乘程序. 1 Uses Math; 2 Var 3 a,b:AnsiSTring; 4 DC,la,lb:longint; 5 c:Array[-2555555..2 ...

  3. BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...

  4. Go 学习笔记(48)— Go 标准库之 time (获取时/分/秒的单位值、标准时间和Unix时间转换、字符串时间和Time类型转换、时区转换、时间的加减/休眠)

    1. 概要说明 import "time" time 包提供了时间的显示和测量用的函数.日历的计算采用的是公历. Go 提供以下几种时间类型: 时间点 Time 时间段 Durat ...

  5. mysql 字段加减_MySQL中你必须了解的函数

    在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重.小编刚开始学习的时候也会有这个感觉.不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个.今天小编就把常 ...

  6. c语言中程序偏离,C语言中的指针加减偏移量

    首先看一段程序: #include int main() { int a[5] = {1, 2, 3, 4, 5}; int* p = (int*)(&a + 1); printf(" ...

  7. void *指针的加减运算

    1.手工写了一个程序验证void *指针加减运算移动几个字节: //本程序验证空类型指针减1移动几个字节 #include <stdio.h> int main(int argc, cha ...

  8. java转置矩阵相乘_java实现矩阵的加-减-乘-转置运算

    <java实现矩阵的加-减-乘-转置运算>由会员分享,可在线阅读,更多相关<java实现矩阵的加-减-乘-转置运算(3页珍藏版)>请在人人文库网上搜索. 1.import ja ...

  9. java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)...

    获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.ou ...

最新文章

  1. Swift_类型选择
  2. 憋个大招!一起“干完”这份300页1000道面试题
  3. 开机流程与主要开机记录区(MBR)
  4. Java-Web 基础加强之泛型、注解和Servlet3.0新特性
  5. java调用接口失败重调_java 接口调用问题
  6. 创建 overlay 网络 - 每天5分钟玩转 Docker 容器技术(50)
  7. flask 安装flask_resultful
  8. android 空格的转义字符,Android 常用转义字符
  9. 卷积神经网络如何进行图像识别的
  10. 学习笔记(1):《微电子器件》陈星弼(第四版)第1章 半导体物理基础及基本方程
  11. HTML基础知识概要面试必备
  12. 熊写代码这三年:阅读写作与技术成长
  13. android sqlite动态创建表,QT下如何实现SQLite动态创建表
  14. 3.4 Postman调用手顺(Netsuite相关)
  15. H264视频高压心得——兼容华为U8800+(硬解720P)
  16. 【前端三剑客三】 JavaScript
  17. 撤销博士学位!取消硕导资格!科技部最新通报一批科研不端案件...
  18. 自动驾驶入门技术(4)—— 摄像头
  19. [软件]Windows Genuine Advantage Validation Cracked
  20. 白皮书:InfiniBand简介

热门文章

  1. 哔哩哔哩小甲鱼 汇编语言 记录一下 寄存器(内存访问)两个小实验
  2. 机器人4大坐标系讲解,别在搞混了!
  3. OpenCV中使用YOLO对象检测
  4. @Accessors
  5. Docker-理解镜像构成
  6. 一步一步粗谈linux文件系统(三)----超级块(superblock)【转】
  7. CentOS7.4下DNS服务器软件BIND安装及相关的配置(一)
  8. Linux中mmap与munmap函数系统调用
  9. Python同步文件
  10. 如何正确连接数据库???