zl程序教程

您现在的位置是:首页 >  其它

当前栏目

372. 超级次方

超级 次方
2023-09-14 09:06:52 时间

372. 超级次方

你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。

示例 1:

输入:a = 2, b = [3]
输出:8

示例 2:

输入:a = 2, b = [1,0]
输出:1024

示例 3:

输入:a = 1, b = [4,3,3,8,5,2]
输出:1

示例 4:

输入:a = 2147483647, b = [2,0,0]
输出:1198

这题写了两种解法,解题代码如下:

int de_pow(int a,int n){
   int i=0;
   int p=a;
 
   if(n==0){
       return 1;
   }
     a=1;
    for(i=0;i<n;i++){
        a=a*p;
        a=a%1337;
    }
    return a;
}



int superPow(int a, int* b, int bSize){
    a=a%1337;
    if(a==1){
        return 1;
    }
    
   
    printf("%d ",a);
    int i;
    int p=a;
      a=de_pow(a,b[i]);
    for(i=1;i<bSize;i++){
        
        a=de_pow(a,10);
       //  printf("--%d ",a);
      // printf("a %d b[i] %d",a,b[i-1]);
        a=(de_pow(p,b[i])*a)%1337;
   //     printf("%d ",a);
        

    }
  //  printf("%d %d",a,i);
    return a;

}

解法二:

int de_pow(int a,int n){
   int i=0;
   int p=a;
 
   if(n==0){
       return  1;
   }
     a=1;
    for(i=0;i<n;i++){
        a=a*p;
        a=a%1337;
    }
    return a;
}



int superPow(int a, int* b, int bSize){
    a=a%1337;
    if(a==1){
        return 1;
    }
    int p=a;
    
   
   // printf("%d ",p);

    int i;
 
      a=de_pow(a,b[bSize-1]);
    for(i=bSize-2;i>=0;i--){
        
        p=de_pow(p,10);
        // printf("%d ",p);
    
        int bz=de_pow(p,b[i]);
       //    printf("%d ",a);
        a=(a*bz)%1337;
 

    }
  //  printf("%d %d",a,i);
    return a;

}