杭电1002_A + B Problem II
这是该题的链接http://acm.hdu.edu.cn/showproblem.php?pid=1002
具体的题的内容就不过多描述了,想必你已经知道了,当我看完这道题后就知道咋写了,可是这道题从开始写到最后accept却花了我好长时间。
先描述一下我的思路,当我看到第二个测试数据后就知道用可以表示范围最大的unsigned long long int 也是无法表示的,之前刷蓝桥杯里面的题,遇到过这种题
因为我对java熟悉一下,所以可以使用BigDecimal解决,或者用数组.所以我果断采用了数组,就是先把输入的数(字符串)存入两个数组里面,每个元素代表一位
,然后反转,这样可以先个位数相加,最后再把结果反转过来即可,由于写算法从java转c++不就,所以c++很多函数还不熟,还有这道题的一些细节等因素耽误了我一些时间。
不过最终成功accept;
下面是具体的代码。
#include<bits/stdc++.h> using namespace std;
char arr2[]={''};//保存输入的第一个字符串
char arr3[]={''};//保存输入的第二个字符串
//声明的数组能放在main()之外就尽量放在main()之外,可以减少一些不常见的错误
int main()
{ int a ;
cin >>a;
int k=;//输出时用来标记次序
int s1=a;//保存a值
string a1,a2;
string arr1[a];//最终的和,
while(a--){
arr2[]={};
arr3[]={};
cin >> a1 >> a2;
reverse(a1.begin(),a1.end());//加数反转方便先从个位相加
reverse(a2.begin(),a2.end()); strcpy(arr2,a1.c_str());
strcpy(arr3,a2.c_str());//字符串变字符数组方便保存 int ml=max(a1.length(),a2.length());//长度较大的加数
int mll=min(a1.length(),a2.length());//长度较小的加数
int arr4[ml+]={};
int flag=;
for(int i=;i<ml;i++){
if(i<mll || a1.length()==a2.length()){ arr4[i]=(((int)arr2[i]-)+((int)arr3[i]-)+flag)%;//对应位相加
flag=(((int)arr2[i]-)+((int)arr3[i]-)+flag)/;//是否进位保存在flag里面
}
if(i>=mll && a1.length()>a2.length()){
arr4[i]=(((int)arr2[i]-)+flag)%;//48是保证char到int相互转变代表的数字不变
flag=(((int)arr2[i]-)+flag)/;
}
if(i>=mll && a2.length()>a1.length()){
arr4[i]=(((int)arr3[i]-)+flag)%;
flag=(((int)arr3[i]-)+flag)/;
}
if(i==ml- && flag==){//确定最高位是否为进位得到的1
arr4[i+]=;
} } if(arr4[ml]==){//最高位为0则不输出最高位,
reverse(arr4,arr4+(ml+));
for(int i=;i<ml+;i++){
arr1[a]+=((char)(arr4[i]+));
}
}
else{
reverse(arr4,arr4+(ml+));
for(int i=;i<ml+;i++){
arr1[a]+=((char)(arr4[i]+));
}
}
reverse(a1.begin(),a1.end());
reverse(a2.begin(),a2.end());//再此反转得到最终结果
cout <<"Case " <<k++<<":" << endl;
cout <<a1 <<" + " <<a2<<" = " << arr1[a] << endl;
if(a!=){
cout << endl;
} } return ;
}
结论:由于自己的c++水平一般,所以代码并不是很规范,请原谅。
杭电1002_A + B Problem II的更多相关文章
- 杭电1002-A + B Problem II
#include<stdio.h>#include<string.h> int main(){ char str1[1001],str2[1001]; int t, ...
- 杭电oj-1002-A+B Problem
Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...
- 杭电 2639 Bone Collector II【01背包第k优解】
解题思路:对于01背包的状态转移方程式f[v]=max(f[v],f[v-c[i]+w[i]]);其实01背包记录了每一个装法的背包值,但是在01背包中我们通常求的是最优解, 即为取的是f[v],f[ ...
- 杭电OJ----1002A + B问题II(超大数计算问题)
Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...
- 杭电ACM2058--The sum problem
http://acm.hdu.edu.cn/showproblem.php?pid=2058 以为简单的穷举就完了,结果是一直Time Limit Exceeded.. 这是代码: #include ...
- 【单调栈】hdu 6319 杭电多校Problem A. Ascending Rating
http://acm.hdu.edu.cn/showproblem.php?pid=6319 从后往前更新,维护一个递减单调栈(队列) 最近很多题都是单调栈... #define _CRT_SECUR ...
- 杭电-------2055An Easy Problem(C语言)
#include<stdio.h> int main() { int m; int i; scanf("%d", &m); ]; int y; int z; ; ...
- 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过
杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...
- 杭电ACM刷题(1):1002,A + B Problem II 标签: acmc语言 2017-05-07 15:35 139人阅读 评
最近忙于考试复习,没有多少可供自己安排的时间,所以我利用复习之余的空闲时间去刷刷杭电acm的题目,也当对自己编程能力的锻炼吧. Problem Description I have a very si ...
随机推荐
- 【题解】 AT2134 Zigzag MST
[题解]AT2134 Zigzag MST 一道MST好题 \(Anson\)有云: 要么是减少边的数量. 要么是改变连接边的方式. 那么如何减少边的数量呢?很简单,把所有不可能对答案产生贡献的边去掉 ...
- Java基础教程:HashTable与HashMap比较
Java基础教程:HashTable与HashMap比较 1. 关于HashMap的一些说法: a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...
- empty blank
非nil对象才能调用 empty nil: 对象是否存在empty: ”“ []blank: nil emptypresent: ! blank
- Java多线程系列 基础篇07 synchronized底层优化
转载 http://www.cnblogs.com/paddix/ 作者:liuxiaopeng http://www.infoq.com/cn/articles/java-se-16-synchro ...
- BZOJ 4868-4873 题解
BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. #include<bits/stdc++.h> using namespace std; #define ...
- BZOJ 3083 遥远的国度 树链剖分+线段树
有换根的树链剖分的裸题. 在换根的时候注意讨论. 注意数据范围要开unsigned int或longlong #include<iostream> #include<cstdio&g ...
- Codeforces - 828C String Reconstruction —— 并查集find()函数
题目链接:http://codeforces.com/contest/828/problem/C C. String Reconstruction time limit per test 2 seco ...
- Linux学习之路(四)帮助命令
帮助命令man .man 命令 #获取指定命令的帮助 .man ls #查看ls的帮助 man的级别 1 查看命令的帮助 2 查看可被内核调用的函数的帮助 3 查看函数的函数库的帮助 4 查看特殊文件 ...
- 2013各大IT公司薪资标准
以此鼓励自己 :http://jinhua.19lou.com/forum-874-thread-115901362964023509-1-1.html 以下三个是老大级别的公司 [微软] 研 ...
- BZOJ 1041 [HAOI2008]圆上的整点:数学【费马平方和定理】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...