tôi đã viết mã C++ để tạo số k đầu tiên và cuối cùng của một số lớn đến 10^9. (k < = 9).chữ k đầu tiên và cuối cùng của số n^n
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;
}
nơi function foo() là:
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;
}
này mang lại cho tôi đầu ra như: nếu được 9 và 3 như đầu vào, nó mang lại cho đầu tiên và cuối cùng 3 chữ số 9 với sức mạnh 9 (9^9) tức là 387 và 489. Nhưng tôi vẫn bỏ lỡ một số trường hợp thử nghiệm. Bất cứ ai có thể vui lòng giúp tôi tìm ra trường hợp thử nghiệm mà mã của tôi sẽ không hoạt động?
1 ≤ n ≤ 109, 1 ≤ k ≤ 9 báo cáo vấn đề: http://www.codechef.com/problems/MARCHA4/
nếu bạn biết có trường hợp mã bạn không hoạt động, tại sao bạn không mô tả trường hợp đó. nó có vẻ giống như bài tập ở nhà, nơi nhiệm vụ của bạn là tìm ra nó. sau đó bạn không được phục vụ tốt bằng cách có ai đó trên Stack Overflow tìm ra cho bạn - sẽ làm hỏng việc học của bạn hoàn toàn –
Từ mô tả vấn đề đó, có vẻ như bạn đang phải tìm một phương thức hoạt động cho RẤT lớn ' n', vd "tìm 4 chữ số đầu tiên và cuối cùng của 2413 được nâng lên đến 2413". –
IMHO, Chú thích mã của bạn bằng các nhận xét sẽ giúp bạn nhận được câu trả lời nhanh hơn. –