看以下代码:
#include<bits/stdc++.h>
using namespace std;
struct BigInt{
int a[10005];
int len;
}ans[1005];
BigInt operator +(BigInt x,BigInt y){
BigInt ans;
ans.len=max(x.len,y.len);
for(int i=0;i<ans.len;i++){
ans.a[i]=x.a[i]+y.a[i];
}
for(int k=0;k<=ans.len;k++){
ans.a[k+1]+=ans.a[k]/10;
ans.a[k]%=10;
}
if(ans.a[ans.len]){
ans.len++;
}
return ans;
}
void print(BigInt output){
for(int i=output.len-1;i>=0;i--){
printf("%d",output.a[i]);
}
return;
}
int main(){
ans[1].a[0]=1;
ans[1].len=1;
ans[2]=ans[1];
int m,n;
scanf("%d%d",&m,&n);
n=n-m+1;
for(int i=3;i<=n;i++){
ans[i]=ans[i-1]+ans[i-2];
}
print(ans[n]);
return 0;
}
40分(WA on #3、#4、#5)
调了半天感觉没有问题(真的没有问题)
然后多加了个printf(" \n");,然后就……
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct BigInt{
int a[10005];
int len;
}ans[1005];
BigInt operator +(BigInt x,BigInt y){
BigInt ans;
ans.len=max(x.len,y.len);
for(int i=0;i<ans.len;i++){
ans.a[i]=x.a[i]+y.a[i];
}
for(int k=0;k<=ans.len;k++){
ans.a[k+1]+=ans.a[k]/10;
ans.a[k]%=10;
}
if(ans.a[ans.len]){
ans.len++;
}
return ans;
}
void print(BigInt output){
for(int i=output.len-1;i>=0;i--){
printf("%d",output.a[i]);
}
return;
}
int main(){
ans[1].a[0]=1;
ans[1].len=1;
ans[2]=ans[1];
int m,n;
scanf("%d%d",&m,&n);
n=n-m+1;
for(int i=3;i<=n;i++){
ans[i]=ans[i-1]+ans[i-2];
//print(ans[i]);
//printf("\n");
}
print(ans[n]);
printf(" \n");
return 0;
}