1005 大数加法

1005 大数加法

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

给出2个大整数A,B,计算A+B的结果。

Input

第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)

Output

输出A + B

Input示例

68932147586
468711654886

Output示例

537643802472

c++代码
  1 #include <iostream>
  2 #include <cstring>
  3 #include <bits/stdc++.h>
  4 using namespace std;
  5
  6 string bigadd(string s,string ss){
  7     string tt;
  8     int slen = s.length();
  9     int sslen = ss.length();
 10     reverse(s.begin(),s.end());
 11     reverse(ss.begin(),ss.end());
 12     int index = 0;
 13     for(int i=0;i<min(slen,sslen);i++){
 14         int a = s[i]-‘0‘,b = ss[i]-‘0‘;
 15         int at = a+b+index;
 16         if(at>9){
 17             tt+=at-10+‘0‘;
 18             index = 1;
 19         }else{
 20             tt+=at+‘0‘;
 21             index = 0;
 22         }
 23     }
 24     for(int i=min(slen,sslen);i<max(slen,sslen);i++){
 25         if(slen>i){
 26             int a = s[i]-‘0‘;
 27             int at = a+index;
 28             if(at>9){
 29                 tt+=at-10+‘0‘;
 30                 index = 1;
 31             }else{
 32                 tt+=at+‘0‘;
 33                 index = 0;
 34             }
 35         }else{
 36             int b = ss[i]-‘0‘;
 37             int at = b+index;
 38             if(at>9){
 39                 tt+=at-10+‘0‘;
 40                 index = 1;
 41             }else{
 42                 tt+=at+‘0‘;
 43                 index = 0;
 44             }
 45         }
 46     }
 47     if(index){
 48         tt+=‘1‘;
 49     }
 50     reverse(tt.begin(),tt.end());
 51     return tt;
 52 }
 53
 54 string bigdel(string s,string ss){//s>=ss
 55     string tt,st;
 56     int slen = s.length();
 57     int sslen = ss.length();
 58     reverse(s.begin(),s.end());
 59     reverse(ss.begin(),ss.end());
 60     int index = 0;
 61     for(int i=0;i<sslen;i++){
 62         int a = s[i]-‘0‘;
 63         int b = ss[i]-‘0‘;
 64         int at = a-b-index;
 65         if(at<0){
 66             tt+=at+10+‘0‘;
 67             index = 1;
 68         }else{
 69             tt+=at+‘0‘;
 70             index = 0;
 71         }
 72     }
 73     for(int i=sslen;i<slen;i++){
 74         int b = s[i]-‘0‘;
 75         int at = b - index;
 76         if(at<0){
 77             tt+=at+10+‘0‘;
 78             index = 1;
 79         }else{
 80             tt+=at+‘0‘;
 81             index = 0;
 82         }
 83     }
 84     bool prime = true;
 85     for(int i = slen-1;i>=0;i--){
 86         if(tt[i]!=‘0‘){
 87             prime = false;
 88         }
 89         if(!prime){
 90             st+=tt[i];
 91         }
 92     }
 93     if(st.length()==0)
 94         st+=‘0‘;
 95     return st;
 96 }
 97
 98 int compare(string s,string ss){
 99     int slen = s.length();
100     int sslen = ss.length();
101     if(slen==sslen){
102         for(int i=0;i<slen;i++){
103             if(s[i]==ss[i]){
104                 continue;
105             }else{
106                 return s[i]>ss[i];
107             }
108         }
109     }else{
110         return slen > sslen;
111     }
112     return 2;
113 }
114 string s,ss;
115 int main(){
116     while(cin>>s>>ss){
117         bool sflag=true, ssflag=true;
118         if(s[0]==‘-‘){
119             s.erase(0,1);
120             sflag = false;
121         }
122         if(ss[0]==‘-‘){
123             ss.erase(0,1);
124             ssflag = false;
125         }
126         if((sflag&&ssflag)||(!sflag&&!ssflag)){
127             string st = bigadd(s,ss);
128             if(sflag)
129                 cout<<st<<endl;
130             else{
131                 st=‘-‘+st;
132                 cout<<st<<endl;
133             }
134         }else{
135             string st;
136             if(sflag){//s为正数
137                 if(compare(s,ss)==0){
138                     st = bigdel(ss,s);
139                     st=‘-‘+st;
140                     cout<<st<<endl;
141                 }else if(compare(s,ss)==1){
142                     st = bigdel(s,ss);
143                     cout<<st<<endl;
144                 }else{
145                     cout<<"0"<<endl;
146                 }
147             }else{//ss为正数
148                 if(compare(s,ss)==0){
149                     st = bigdel(ss,s);
150                     cout<<st<<endl;
151                 }else if(compare(s,ss)==1){
152                     st = bigdel(s,ss);
153                     st=‘-‘+st;
154                     cout<<st<<endl;
155                 }else{
156                     cout<<"0"<<endl;
157                 }
158             }
159         }
160     }
161     return 0;
162 }

JAVA:

 1 import java.util.*;
 2 import java.io.*;
 3 import java.lang.String;
 4 import java.math.BigDecimal;
 5
 6 public class p1036
 7 {
 8     public static void main(String[] args)
 9     {
10         String s1,s2;
11         Scanner cin = new Scanner(System.in);
12         s1 = cin.next();
13         s2 = cin.next();
14         BigDecimal b1 = new BigDecimal(s1);
15         BigDecimal b2 = new BigDecimal(s2);
16         System.out.println(b1.add(b2));
17         cin.close();
18     }
19 }

原文地址:https://www.cnblogs.com/zllwxm123/p/8945225.html

时间: 2024-10-12 22:17:30

1005 大数加法的相关文章

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

1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数) Output 输出A + B Input示例 68932147586 468711654886 Output示例 537643802472 题目链接:http://www.51nod.com/onlineJudge/questionCode.html#

【51Nod】1005 大数加法

给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数) Output 输出A + B Input示例 68932147586 468711654886 Output示例 537643802472 ==================================================================================================== 问题解法

51nod基础题感触(1005大数加法)

这篇就作为算法学习这块的第一篇文章啦!之前一直想来写一下博客来着,但是自己太懒了,建模比赛后想多休息(玩)一会儿(很长时间),一直没写.最近总算是下定决定了! “的确是要开始写一写最近自己做题的感受了!”(超认真的!) 直入正题!(由于才正式开始学习,理解有不足之处还请指正!) 首先,遇到这样的题,如果不限制语言的话,抱着能快则快的心态,我们就用强大的Python就行了.实现起来也是十分地的简单,在这里,我就直接上代码啦!(这里我用的是Python3.6) a=input()#输入,这时候的a实

51nod 1005 大数加法

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 Input 第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数) Output 输出A + B Input示例 68932147586 468711654886 Output示例 537643802472 Java在处理大数据方面很具有优势~~~~~~~~~~~~~~~~~~~ import java.math.BigInteger; import java.util.Scan

大数加法、大数乘法

大数加法 hdu1002 #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <sstream> #include <algorithm> #include <set> #include <map> #include <vector> #i

C语言 &#183; 大数加法

算法提高 大数加法 时间限制:1.0s   内存限制:256.0MB 问题描述 输入两个正整数a,b,输出a+b的值. 输入格式 两行,第一行a,第二行b.a和b的长度均小于1000位. 输出格式 一行,a+b的值. 样例输入 42 样例输出 6 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char a[1001],b[1001]; 6 int s[1001],d[1001]; 7 scanf("

NI笔试——大数加法

NI笔试: 1.找出字符串第一次出现的字符.用数组建立哈希表,然后再扫描字符串并判断次数是否为1. 2.大数加法,即字符串加法.因为之前写过乘法,就以为是乘法.然后就把乘法写上去了····= = 好了,看一下加法的思路. 要不要太简单,用俩数组,先把字符串每个位转换成数字存到这俩数组里,然后对每一位进行加和. 代码是拿别人的.= = void Add(char s1[],char s2[]) //需要两个字符串参数&&无返回值 { int num1[M],nm2[M]; int i,j;

大数加法、乘法

1 #include<iostream> 2 3 #include<stdio.h> 4 5 #include<string.h> 6 7 #define Len 3000//大数的长度 8 9 using namespace std; 10 11 int Input (char n[])//将大数读入的函数 12 13 { 14 15 char s[Len]; 16 17 int i,l; 18 19 20 21 for(i=0; i<Len; i++) n[i

A + B Problem II(大数加法)

一直格式错误,不想改了,没A 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 using namespace std; 6 7 int main() 8 { 9 int T,K=0; 10 scanf("%d",&T); 11 char a[1002],b[1002]; 12 int ta[1002],