题目:
有n位数d1d2d3...dn,如果将最后一位数dn移到首位,即dnd1d2d3...d(n-1),且 dnd1d2d3...d(n-1) = dn*d1d2d3...dn,则称这个数满足条件。
输入dn和k,求出尾数为dn的满足条件的第k个数。
目前只想到大数来做,但超时。暂时没有更好方法,先放着
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
string bignumber = "1";
string lefts = "1";
int times,dn;
void addBig()
{
int len = bignumber.length();
for(int i =len-2;i>=0;--i)
{
int end = bignumber[i]-'0';
++end;
if(end>=10)
{
bignumber[i] = '0'+0;
if(i == 0)
{
bignumber = lefts+bignumber;
break;
}
else
continue;
}
else
{
bignumber[i] = '0'+end;
break;
}
}
}
bool judge()
{
int len = bignumber.length();
string temp = bignumber.substr(0,len-1);
string templ ="s";
templ[0] = bignumber[len-1];
if(templ[0] != ('0'+dn) )
return false;
int begin = atoi(templ.c_str());
templ += temp;
int oldNum = atoi(bignumber.c_str());
int newNum = atoi(templ.c_str());
if(newNum == begin*oldNum)
{
--times;
if(times == 0)
{
return true;
}
}
return false;
}
int main()
{
while(cin>>dn>>times)
{
bignumber += '0'+dn;
while(!judge())
{
addBig();
}
printf("%s\n",bignumber.c_str());
bignumber.resize(1);
bignumber = "1";
}
return 1;
}