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