练练

大数加法一般为小学生式的“竖式计算”要特别注意的是借位与进位的问题(先给看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);

是不是感觉被耍了,嘿嘿

51NOD 大数加法以及python写法的更多相关文章

  1. 51Nod大数加法(两个数正负都可)

    很多大数的问题都运用模拟的思想,但是这个说一样也一样,但是难度较大,很麻烦,我自己谢写了100多行的代码,感觉很对,但就是WA.其实个人感觉C和C++没有大数类,是对人思想和算法的考验,但是有时候做不 ...

  2. [51NOD]大数加法(模拟)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005 要处理符号,还要特别注意0和连续进位等情况.偷懒使用st ...

  3. 51 Nod 1005 大数加法【Java大数乱搞,python大数乱搞】

    1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度  ...

  4. 51nod 1005 大数加法

    #include<iostream> #include<string> using namespace std; #define MAXN 10001 },b[MAXN]={} ...

  5. 大数高精度加减乘除 51nod 1005 大数加法

    1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B ...

  6. 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)

    题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...

  7. UVa 495【大数加法】

    UVa 495 求第n位斐波那契数列,n<=5000. 还是大数问题,这次是大数加法.仿照UVa 623的解法来做.623位数可以一位一位的增,但是这个需要预先给够位数,要是按六位存一个数组元素 ...

  8. c#大数加法

    在C#中,我们经常需要表示整数.但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数 ...

  9. Leetcode 67 Add Binary 大数加法+字符串处理

    题意:两个二进制数相加,大数加法的变形 大数加法流程: 1.倒置两个大数,这一步能使所有大数对齐 2.逐位相加,同时进位 3.倒置两个大数的和作为输出 class Solution { public: ...

随机推荐

  1. Java编程基础阶段笔记 day 07 面向对象编程(上)

    ​ 面向对象编程 笔记Notes 面向对象三条学习主线 面向过程 VS 面向对象 类和对象 创建对象例子 面向对象的内存分析 类的属性:成员变量 成员变量 VS 局部变量 类的方法 方法的重载 可变个 ...

  2. 03、Swagger2和Springmvc整合详细记录(爬坑记录)

    时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...

  3. OpenCV中图像处理

    一.颜色空间转换 1.cv2.cvtColor(input_img,flag) 参数1是要转换的图像 参数2是转换类型  例如:cv2.COLOR_BGR2HSV (RGB->HSV) cv2. ...

  4. Django-channels 实现WebSocket实例

    引入 先安装三个模块 pip install channels pip install channels_redis pip install pywin32 创建一个Django项目和一个app 项目 ...

  5. 03 requests模块基础

    1. requests 模块简介 什么是requests 模块 requests模块是python中原生的基于网络请求的模块,功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的地位.requests ...

  6. Kali Linux-装机后通用配置

    目录 前言 一. 网络优化 更换host 更换dns 添加源 二. 更新系统 三 .安装N卡驱动 四.修复 add-apt-repository 五.安装常用软件 安装apt自带的包 安装第三方的de ...

  7. CMS和G1的区别

    CMS:以获取最短回收停顿时间为目标的收集器,基于并发“标记清理”实现 过程: 1.初始标记:独占PUC,仅标记GCroots能直接关联的对象 2.并发标记:可以和用户线程并行执行,标记所有可达对象 ...

  8. python相关性算法解决方案(rest/数据库/json/下载)

    1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的相关性算法,算法原理就不介绍了,只从代码层面进行介绍,包 ...

  9. JAVA 获取时间段内的每一天

    public class day { public static void main(String[] args) { // TODO Auto-generated method stub Strin ...

  10. mysql count(*)与count(1)的区别

    count() 对行数进行计算,包括NULL: count(column) 计算特定的列的值的行数,不包括NULL: count(1)这个用法和count()的结果是一样的. http://blog. ...