杭电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 ...
随机推荐
- python cookbook第三版学习笔记六:迭代器与生成器
假如我们有一个列表 items=[1,2,3].我们要遍历这个列表我们会用下面的方式 For i in items: Print i 首先介绍几个概念:容器,可迭代对象,迭代器 容器是一种存储数据 ...
- selector + drawable 多状态图形
select_drawble.xml<?xml version="1.0" encoding="utf-8"?> <selector xmln ...
- Android OpenGL 播放视频学习
1, 初步接触Open GL: http://www.cnblogs.com/TerryBlog/archive/2010/07/09/1774475.html 使用GLSurfaceView和Ren ...
- python源码安装的包的卸载
python setup.py install安装的包如何卸载 在使用源码安装的过程中,记录安装文件细节,如: python setup.py install --record log 这时所有的安装 ...
- 《avascript 高级程序设计(第三版)》 ---第三章 基本概念2
1.乘性操作符: 1)*法操作法: Infinity * 0 = NaN Infinity * 非零 = Infinity 或 - Infinity 2)/法操作符: Infinity / In ...
- Linux-3.14.12内存管理笔记【kmalloc与kfree实现】【转】
本文转载自:http://blog.chinaunix.net/uid-26859697-id-5573776.html kmalloc()是基于slab/slob/slub分配分配算法上实现的,不少 ...
- Centos虚拟机克隆后的ip配置
1. rm -rf /etc/udev/rules.d/-persistent-net.rules 2. 重启,然后: vi /etc/udev/rules.d/70-persistent-net.r ...
- 创建blog APP
声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用 什么是APP呢,Django里的APP其 ...
- JAVA- 清除数组重复元素
清除数组重复元素并打印新数组. import java.util.*; public class Repeat { public static void main(String[] args) { / ...
- javascript macrotask & microtask
先看一个 实例 案例 console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Pr ...