Consider a function which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n.
For example, f(13)=6. Notice that f(1)=1. What is the next largest n such that f(n)=n?
翻译过来大体是这样:
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?
我是用C写的,原题要求用java,其实无所谓了,欢迎大家指点:
#include <cstdio>
#include <iostream>
using namespace std;
int F(int num)
{
int total = 0;
int one = 1;
int k = 0;
for(;num/one!=0; one=one*10, k++);
int A = 0;
int B = 0;
int C = 0;
int D = 0;
int E = 0;
int two = one/10;
for(; k>0; k--)
{
A = num/one;
B = num%two;
C = num/two;
E = C - D*10;
D = C;
if (E > 1)
{
total += A*two + two;
}
else if (E == 1)
{
total += A*two + B + 1;
}
else if (E == 0)
{
total += A*two;
}
one = one/10;
two = two/10;
}
return total;
}
int main()
{
int num;
while(true)
{
cout << "Enter: ";
cin >> num;
cout << "The total is :" << F(num) << endl ;
}
return 0;
}