天神的密码(可用循环||递归)

    xiaoxiao2023-10-25  158

    这个题的思路很简单,但是细节容易出错,可用循环或递归实现(用空间换时间)!(提交数据显示:递归比循环快3ms)

    点击此处查看题目

    完整代码:

    法1(用循环实现):

    #include <iostream> #include <cstdio> using namespace std; int t,n,k; int main() {     scanf("%d",&t);     while(t--)     {         scanf("%d%d",&n,&k);         long long x,y=0,f=1;         for(int i=0;i<k;i++)         {             f*=n;         }         x=f;         while(x>9)         {             y=0;//每次计算新的数的时候y一定要初始化!             while(x)             {                 y+=x;                 x/=10;             }             x=y;         }         printf("%lld\n",x);     }     return 0; }  

    法2(用递归实现):

    #include <iostream> #include <cstdio> using namespace std; int t,n,k; long long password(long long x,long long y) {     y+=x;     x/=10;     if(x==0)     {         x=y;         if(x<=9)         {             return x;         }         else{             return password(x,0);         }     }     else{         return password(x,y);     } } int main() {     scanf("%d",&t);     while(t--)     {         scanf("%d%d",&n,&k);         long long x,f=1;         for(int i=0;i<k;i++)         {             f*=n;         }         x=f;         long long ans=password(x,0);         printf("%lld\n",ans);     }     return 0; }  

     

    最新回复(0)