说多了都是泪,今天下午陪师兄参加了一下华为的笔试题,以为能帮上忙,尼玛现场C++忘得差不多了;
要求用C/C++/JAVA答题,其中有一题看起来比较简单,大整数的减法,输入两个以空格隔开的100位以内的长正整数,输出减法的结果;最终没做出来;回来补上;
以下贴上代码;
<pre name="code" class="html">#include <iostream>
#include<string>
using namespace std;
int main()
{
string shu1,shu2;
int shu1_copy[200],shu2_copy[200],jieguo[200];
int i,j,len1,len2;
cin>>shu1>>shu2;
len1=shu1.size();
len2=shu2.size();
for(i=0;i<200;i++)
{
shu1_copy[i]=0;
shu2_copy[i]=0;
jieguo[i]=0;
}
for(i=200-len1,j=0;i<200;i++)
{
shu1_copy[i]=shu1[j]-'0';
j++;
}
for(i=200-len2,j=0;i<200;i++)
{
shu2_copy[i]=shu2[j]-'0';
j++;
}
//比较两个数的大小
bool daxiao=1;
for(i=0;i<200;i++)
{
if(shu1_copy[i]>shu2_copy[i])
{
break;
}
if(shu1_copy[i]<shu2_copy[i])
{
daxiao=0;
break;
}
}
//计算加减
int de=0;//判断借位
for(i=199;i>0;i--)
{
if(de==-1) if(daxiao==1) shu1_copy[i]--;else shu2_copy[i]--;
if(daxiao==1)
{
if(shu1_copy[i]>shu2_copy[i]||shu1_copy[i]==shu2_copy[i])
{
jieguo[i]=shu1_copy[i]-shu2_copy[i];
de=0;
}
else
{
jieguo[i]=shu1_copy[i]-shu2_copy[i]+10;
de=-1;
}
}
else
{
if(shu2_copy[i]>shu1_copy[i]||shu1_copy[i]==shu2_copy[i])
{
jieguo[i]=shu2_copy[i]-shu1_copy[i];
de=0;
}
else
{
jieguo[i]=shu2_copy[i]-shu1_copy[i]+10;
de=-1;
}
}
}
//输出结果
for(i=0;i<200;i++)
if(jieguo[i]!=0) break;
if(i==200) {cout<<"0"<<endl;return 0;}
if(daxiao==0) cout<<"-";
for(j=i;j<200;j++)
{
cout<<jieguo[j];
}
cout<<endl;
return 0;
}
附上华为笔试正确的打开方式:上机——>安装桌面QQ——>QQ群复制粘贴代码——>提交代码——>走人