数字n ^ n的第一个和最后一个k位数

Vai*_*hav 5 c++ algorithm

我写了一个c ++代码,用于生成一个大到10 ^ 9的数字的前后k位数.(K <= 9).

cin>>n>>k;
    cout << (unsigned long)floor(pow(10.0, modf(n*log10((double)n), &dummy) + k - 1)) << " ";  // code that prints the first k digits
    long long int ans = foo(n,k);  // function that prints the last k digits
    if(ans==0)
    {
     for(int i=0;i<k;i++) cout << "0";
    }
    else{
            stringstream ss;
            string s;
            ss<<ans;
            ss>>s;
            if(s.size()!=k)
            {
                 for(int i=0;i<(k-s.size());i++)
          s="0"+s;
            }
            cout<<s;
   }
Run Code Online (Sandbox Code Playgroud)

函数foo()的位置是:

long long int foo(int n, int k)  // code of the function
{
  long long int m=1;
  for(; k > 0; k--) m*=10;

  long long int r=1, t=n % m;
  while(n)
  {
    if (n % 2)
      r = r * t % m;
    t = t * t % m;
    n >>= 1;
  }

   return r;
}
Run Code Online (Sandbox Code Playgroud)

这给了我输出:如果给出9和3作为输入,它给9的第一个和最后3个数字9(9 ^ 9),即387和489.但是我仍然错过了一些测试用例.任何人都可以帮我找出我的代码无效的测试用例吗?

1≤n≤109,1≤k≤9问题陈述:http://www.codechef.com/problems/MARCHA4/

IVl*_*lad 2

如果n^n <= 10^9,在这种情况下您的代码似乎工作正常。但是,如果您允许更大的值n(例如 )11^11,并要求输入最后 4 位数字(即 )0611,则您的代码将仅打印611。基本上,它不会在应该打印任何前导零的时候打印任何前导零。