int times = 0;int need MINUS = 0;
int arr[10];
int save = n;
while(n & gt;10)
{
times+= n/10;
needMinus++;
n/= 10;
}
for(int I = 0;我!=10;++i)
arr[I]= times;
arr[0]-= need MINUS;
n =保存;
for(int I = 1;我& lt= need MINUS+1;++i)
{
int e = n % 10;
for(int j = 1;j & lt= e;++j)
arr[j]++;
n/= 10;
}
這裏,0-9的出現次數存儲在數組arr中。
算法的思路主要是逐層分析,每壹位是0-9個周期,周期數就是這個位之前的值。
例如456321,則位值6 * * *循環45次,位值2循環4563次。這裏的循環是指
壹個完整的循環,但是第壹個循環沒有0,算法減去needMinus(實際等於總位數減壹)。
剩下的工作是計算每壹位沒有完成循環的最後時間。