私は10^9という大きさの最初と最後のk桁を生成するためのC++コードを書いています。 (k < = 9)。このように私に出力を与える数字の最初と最後のk桁
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;
}
:入力として9及び3を与えられた場合 、それは電源9(TO 9の最初と最後の3桁を与える関数foo()がある
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;
}
9^9)すなわち387と489です。しかし、まだいくつかのテストケースがありません。 誰かが私のコードがうまくいかないテストケースを見つけるのを助けてくれますか? 109≤
1≤nは、1≤K≤9 問題の記述:あなたのコードが正常に動作するようですhttp://www.codechef.com/problems/MARCHA4/
コードが機能しないケースがある場合は、そのケースについて説明してください。それはあなたの仕事がそれを把握することである宿題のように聞こえる。あなたはスタックオーバーフローの人にあなたのためにそれを理解させることによってうまくやっていません - あなたの学習を完全に甘やかすでしょう –
その問題の説明から、非常に大きな ' n '、例えば"2413の2413の最初と最後の4桁を見つけてください"。 –
IMHO、あなたのコードにコメントを付けると、より速い答えを得るのに役立ちます。 –