首页 > 其他 > 详细

A + B Problem II

时间:2018-10-04 22:20:07      阅读:154      评论:0      收藏:0      [点我收藏+]

这是该题的链接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[1005]={‘0‘};//保存输入的第一个字符串
char arr3[1005]={‘0‘};//保存输入的第二个字符串
//声明的数组能放在main()之外就尽量放在main()之外,可以减少一些不常见的错误
int main()
{

int a ;
cin >>a;
int k=1;//输出时用来标记次序
int s1=a;//保存a值
string a1,a2;
string arr1[a];//最终的和,
while(a--){
arr2[1000]={0};
arr3[1000]={0};
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+1]={0};
int flag=0;
for(int i=0;i<ml;i++){
if(i<mll || a1.length()==a2.length()){

arr4[i]=(((int)arr2[i]-48)+((int)arr3[i]-48)+flag)%10;//对应位相加
flag=(((int)arr2[i]-48)+((int)arr3[i]-48)+flag)/10;//是否进位保存在flag里面
}
if(i>=mll && a1.length()>a2.length()){
arr4[i]=(((int)arr2[i]-48)+flag)%10;//48是保证char到int相互转变代表的数字不变
flag=(((int)arr2[i]-48)+flag)/10;
}
if(i>=mll && a2.length()>a1.length()){
arr4[i]=(((int)arr3[i]-48)+flag)%10;
flag=(((int)arr3[i]-48)+flag)/10;
}
if(i==ml-1 && flag==1){//确定最高位是否为进位得到的1
arr4[i+1]=1;
}

}


if(arr4[ml]==0){//最高位为0则不输出最高位,
reverse(arr4,arr4+(ml+1));
for(int i=1;i<ml+1;i++){
arr1[a]+=((char)(arr4[i]+48));
}
}
else{
reverse(arr4,arr4+(ml+1));
for(int i=0;i<ml+1;i++){
arr1[a]+=((char)(arr4[i]+48));
}
}
reverse(a1.begin(),a1.end());
reverse(a2.begin(),a2.end());//再此反转得到最终结果
cout <<"Case " <<k++<<":" << endl;
cout <<a1 <<" + " <<a2<<" = " << arr1[a] << endl;
if(a!=0){
cout << endl;
}

}

return 0;
}

结论:由于自己的c++水平一般,所以代码并不是很规范,请原谅。

A + B Problem II

原文:https://www.cnblogs.com/henuliulei/p/9743592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!