A + B Problem II(大数加法)
2015-07-27 17:01
232 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1002
A + B Problem II
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 261608 Accepted Submission(s): 50625
[align=left]Problem Description[/align]
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
[align=left]Input[/align]
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
[align=left]Output[/align]
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
[align=left]Sample Input[/align]
2
1 2
112233445566778899 998877665544332211
[align=left]Sample Output[/align]
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
题解,大数加法一般可以用java,或者用string 或者用数组手动模拟算法,用c++的时候最好用模板
现在先给出java大数加法的代码
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in);//大数的输入,定义一个输入器 BigInteger a = null, b = null, c = null;//开始要赋值成空 a = BigInteger.valueOf(100); b = BigInteger.valueOf(99); int T; T = cin.nextInt();//读入T; // while(cin.hasNextBigInteger())//判断是否读到文件结尾相当于while(~scanf()) for(int cas = 1; cas <= T; cas++) { a = cin.nextBigInteger(); b = cin.nextBigInteger(); // BigInteger zero = BigInteger.valueOf(0);//大数判断是不是等于0 // if(a.equals(BigInteger.valueOf(0))){System.out.println("haha");} // if(a.equals(zero)) {System.out.println("hehe");} c = a.add(b); if(cas > 1) System.out.println();//大数的换行输出 System.out.println("Case " + cas + ":");//大数的输出是用+号连接 System.out.println(a + " + " + b + " = "+c); } cin.close();//关闭读入器 } }
下面是大数string模拟的模板
//***********加法********************* #include<algorithm> string add(string s1,string s2) { string ans = ""; int i,j,x,y,k=0; for(i=s1.length()-1,j=s2.length()-1;i>=0 && j>=0 ;i--,j--) { x = s1[i] - '0'; y = s2[j] - '0'; ans += char((x+y+k)%10 + '0'); k = (x+y+k)/10; } while(i>=0) { x=s1[i]-'0'; ans += char ((x+k)%10 + '0'); k = (x+k)/10; i--; } while(j>=0) { y=s2[j]-'0'; ans += char((y+k)%10 + '0'); k = (y+k)/10; j--; } if(k>0) ans += '1'; //ans.reverse(); reverse(ans.begin(),ans.end()); return ans; } //******************************* //************加法*************** string add(string s1,string s2) { string ans = ""; int i,j,x,y,k=0; for(i=s1.length()-1,j=s2.length()-1;i>=0 && j>=0 ;i--,j--) { x = s1[i] - '0'; y = s2[j] - '0'; ans = char((x+y+k)%10 + '0') + ans; k = (x+y+k)/10; } while(i>=0) { x=s1[i]-'0'; ans = char ((x+k)%10 + '0') + ans;//不如+=快,但是可以不用倒序 k = (x+k)/10; i--; } while(j>=0) { y=s2[j]-'0'; ans = char((y+k)%10 + '0') + ans; k = (y+k)/10; j--; } if(k>0) ans = '1' + ans; return ans; } //*********************加法**************************************
下面是完整的代码
#include<cstdio> #include<iostream> #include<string> #include<cstring> #include<sstream> #include<algorithm> using namespace std; string add(string s1,string s2) { string ans = ""; int i,j,x,y,k=0; for(i=s1.length()-1,j=s2.length()-1;i>=0 && j>=0 ;i--,j--) { x = s1[i] - '0'; y = s2[j] - '0'; ans += char((x+y+k)%10 + '0'); k = (x+y+k)/10; } while(i>=0) { x=s1[i]-'0'; ans += char ((x+k)%10 + '0'); k = (x+k)/10; i--; } while(j>=0) { y=s2[j]-'0'; ans += char((y+k)%10 + '0'); k = (y+k)/10; j--; } if(k>0) ans += '1'; //ans.reverse(); reverse(ans.begin(),ans.end()); return ans; } int main() { string t , tt; int T ,c = 0 ; cin>>T; while(T--) { c++; cin>>t>>tt; string ans = add(t,tt); if(c!=1) cout<<endl; cout<<"Case "<<c<<":"<<endl; cout<<t<<" + "<<tt<<" = "<<ans<<endl; } return 0; }
相关文章推荐
- snnu(1110) 传输网络 (并查集+路径压缩+离线操作 || 线段树)
- 根据微信号来抓取微信文章
- java基础入门-建立可以多客户端链接的ServerSocket
- 亿级Web系统搭建——单机到分布式集群[转]
- 关于python在cmd中输出中文乱码的问题
- android 关于Make sure the plugin is properly configured问题的解决办法
- Openmpi安装
- JVM 进阶 一
- 实习记录
- Realflow制作融化特效
- 【HDOJ 5288】OO’s Sequence
- DOM简要
- 简单研究Android View绘制一 测量过程
- 五大常用算法之二:动态规划算法
- ajax中使用总结
- 在Django框架中设置语言偏好的教程
- Android Volley 完全解析
- VC: 更改MFC程序图标
- 编程开发学习资料必备
- D的小L