这个代码错在什么地方呢?

1
1

我自己测试都是通过的,为什么提交就说错误0%...

#include <stdio.h>
#include <stdint.h>
int64_t getGcd(int64_t a,int64_t b){
    while(a%b){
         int c=b;
         b=a%b;
         a=c;
    }
    return b;
}
void solveGcd(int64_t a,int64_t b,int64_t result[]){
    if(b==1){
         result[0]=0;
         result[b]=1;
         return;
    }
    solveGcd(b,a%b,result);
    int64_t x=result[1];
    int64_t y=result[0]-a/b*x;
    result[0]=x;
    result[1]=y;
    return;
}
int64_t getAnswer(int64_t m[],int64_t r[],int64_t N){
    int64_t M=m[0];
    int64_t R=r[0];
    for(int i=1;i<N;i++){
        int64_t A=M;
        int64_t B=-m[i];
        int64_t C=r[i]-R;
        int64_t gcd=getGcd(A,B);
        if(C%gcd)
           return -1;
        int64_t result[2];
        solveGcd(A/gcd,B/gcd,result);
        result[0]=C/gcd*result[0];
        R=result[0]*M+R;
        M=M*m[i]/getGcd(M,m[i]);
        while(R>0){
             R-=M;
        }
        while(R<0){
             R+=M;
        }
    }
    return R;
}
int main(){
    int64_t N;
    int64_t m[1001],r[1001];
    scanf("%lld",&N);
    for(int i=0;i<N;i++){
        scanf("%lld%lld",&m[i],&r[i]);
    }
    int64_t answer=getAnswer(m,r,N);
    printf("%lld\n",answer);
}
  • /是解方程组的问题么?还是返回的值范围有问题呢?

  • gcc支持int64—t吗?你换long long试试

  • 应该不是long long的问题

  • result[0]=C/gcd*result[0]; while(R>0){ R-=M; }这两个是不是有问题,第一个是不是少点东西,第二个让R最小,你这时让R为负值啊!!

  • 添加评论
  • reply

0 answer(s)

write answer 切换为英文 切换为中文


转发分享