这题比较简单,但老是有一点细节问题搞不清楚,加上格式看错了,贡献了一个PE。虽然有点慢(15MS),但还是AC了。
主要算法:高精度加法
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1002
代码(仅供参考,C++):
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string s1,s2;
int n1[1001],n2[1001],result[1001],i,n,j,k;
cin>>n;
for(k=1;k<=n;k++){
if(k!=1) cout<<endl<<endl;
cin>>s1>>s2;
memset(n1,0,sizeof(n1));
memset(n2,0,sizeof(n2));
memset(result,0,sizeof(result));
//convert string to number and move all number to right side.
for(i=s1.length()-1,j=1000;i>=0;i–,j–){
n1[j]=s1.c_str()[i]-’0′;
}
for(i=s2.length()-1,j=1000;i>=0;i–,j–){
n2[j]=s2.c_str()[i]-’0′;
}
//add
int len=s1.length()>s2.length()?s1.length():s2.length();
for(i=1000;i>1000-len-1;i–){
result[i]=n1[i]+n2[i];
}
//rearrange
for(i=1000;i>0;i–){
if(result[i]>=10){
result[i-1]+=result[i]/10;
result[i]%=10;
}
}
//output
cout<<”Case “<<k<<”:”<<endl;
cout<<s1<<” + “<<s2<<” = “;
bool flag;
for(i=0,flag=false;i<1001;i++){
if(result[i]!=0) flag=true;
if(flag) cout<<result[i];
}
}
cout<<endl;
return 0;
}
Recent Comments