51NOD 大数加法以及python写法
大数加法一般为小学生式的“竖式计算”要特别注意的是借位与进位的问题(先给看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写法的更多相关文章
- 51Nod大数加法(两个数正负都可)
很多大数的问题都运用模拟的思想,但是这个说一样也一样,但是难度较大,很麻烦,我自己谢写了100多行的代码,感觉很对,但就是WA.其实个人感觉C和C++没有大数类,是对人思想和算法的考验,但是有时候做不 ...
- [51NOD]大数加法(模拟)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005 要处理符号,还要特别注意0和连续进位等情况.偷懒使用st ...
- 51 Nod 1005 大数加法【Java大数乱搞,python大数乱搞】
1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 ...
- 51nod 1005 大数加法
#include<iostream> #include<string> using namespace std; #define MAXN 10001 },b[MAXN]={} ...
- 大数高精度加减乘除 51nod 1005 大数加法
1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B ...
- 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)
题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...
- UVa 495【大数加法】
UVa 495 求第n位斐波那契数列,n<=5000. 还是大数问题,这次是大数加法.仿照UVa 623的解法来做.623位数可以一位一位的增,但是这个需要预先给够位数,要是按六位存一个数组元素 ...
- c#大数加法
在C#中,我们经常需要表示整数.但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数 ...
- Leetcode 67 Add Binary 大数加法+字符串处理
题意:两个二进制数相加,大数加法的变形 大数加法流程: 1.倒置两个大数,这一步能使所有大数对齐 2.逐位相加,同时进位 3.倒置两个大数的和作为输出 class Solution { public: ...
随机推荐
- maven 下载 安装 环境配置
电脑系统:win10 64位 idea 2019 Java 1.8 1.链接地址,我一般都找官网 http://maven.apache.org/download.cgi 截图:注意mav ...
- TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)
配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FE ...
- 微信公众号发送消息给用户 php
1.微信公众号 这里得话 一开始先去看了 微信公众号的接口 发现网页授权需要时认证的服务号,一开始想的是那去申请一个认证的服务号岂不是很费事,然后网上搜了搜,发现了还有微信公众号个人测试号这个东西,所 ...
- Promise 学习心得
当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise, Promise 有什么用? 在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Prom ...
- Flink 源码解析 —— Flink JobManager 有什么作用?
JobManager 的作用 https://t.zsxq.com/2VRrbuf 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac ...
- Java学习|HTTP请求头
https://www.cnblogs.com/honghong87/articles/6941436.html 常见http请求报文头属性 Accept:告诉服务端,客户端接受什么类型的响 ...
- asp.net core 从单机到集群
asp.net core 从单机到集群 Intro 这篇文章主要以我的活动室预约的项目作为示例,看一下一个 asp.net core 应用从单机应用到分布式应用需要做什么. 示例项目 活动室预约提供了 ...
- zuul集成Sentinel最新的网关流控组件
一.说明 Sentinel 网关流控支持针对不同的路由和自定义的 API 分组进行流控,支持针对请求属性(如 URL 参数,Client IP,Header 等)进行流控.Sentinel 1.6.3 ...
- Python机器学习之数据探索可视化库yellowbrick-tutorial
背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly ...
- Go-TCP粘包
TCP黏包 黏包示例 服务端代码如下: // socket_stick/server/main.go func process(conn net.Conn) { defer conn.Close() ...