它输出的结果不正确
#include
using namespace std;
char s1[10090],s2[10090],s3[10090];
int a[10090],b[10090],c[10090];
bool cmp(char s1[],char s2[]){
int n=strlen(s1),m=strlen(s2);
if(n!=m){
return nelse{
for(int i=0;iif(s1[i]!=s2[i]){
return s1[i]return false;
}
}
int main(){
int la,lb,lc;
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>s1>>s2;
la=strlen(s1);
lb=strlen(s2);
if(cmp(s1,s2)){
strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
cout<<"-";
}
la=strlen(s1),lb=strlen(s2);
for(i=0;i'0';
for(i=0;i'0';
lc=max(la,lb);
i=1;
while(i<=la || i<=lb){
if(a[i]10;
a[i+1]--;
}
c[i]=a[i]-b[i];
i++;
}
while(c[lc]==0 && lc>1) lc--;
for(i=lc;i>=1;i--){
cout<return 0;
}
在您的代码中,减法的部分有问题。您用了 s1 的长度去循环数组 b,导致 b 数组没有赋值,后面减法出现问题。应该将 s2 的长度赋值给 lb,循环数组 b 时使用 lb。同时,循环数组 a 和 b 时应该使用 lc,保证从高位到低位依次进行减法运算。
下面是修正后的代码:
#include<bits/stdc++.h>
using namespace std;
char s1[10090],s2[10090],s3[10090];
int a[10090],b[10090],c[10090];
bool cmp(char s1[],char s2[]){
int n=strlen(s1),m=strlen(s2);
if(n!=m){
return n<m;
}else{
for(int i=0;i<n;i++){
if(s1[i]!=s2[i]){
return s1[i]<s2[i];
}
}
return false;
}
}
int main(){
int la,lb,lc;
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>s1>>s2;
la=strlen(s1);
lb=strlen(s2);
if(cmp(s1,s2)){
strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
cout<<"-";
}
la=strlen(s1),lb=strlen(s2);
for(i=0;i<la;i++) a[la-i]=s1[i]-'0';
for(i=0;i<lb;i++) b[lb-i]=s2[i]-'0';
lc=max(la,lb);
i=1;
while(i<=lc){
if(a[i]<b[i]){
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
i++;
}
while(c[lc]==0 && lc>1) lc--;
for(i=lc;i>=1;i--){
cout<<c[i];
}
return 0;
}
答案来自c++ https://www.wodianping.com/