题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009
题解:
一道很好的思维题。
不懂的可以看下网上某大牛的博客:http://www.cnblogs.com/jy02414216/archive/2011/03/09/1977724.html
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 10+10;
#define met(a,b) memset(a,b,sizeof(a))
int n;
int account(int n)
{
int cnt=0;
int pos,before,after;
pos=before=after=0;
int i=1;
while((n/i)!=0)
{
pos=(n/i)%10;
before=n/(i*10);
after=n-(n/i)*i;
if(pos>1)
cnt+=(before+1)*i;
else if(pos==0)
cnt+=before*i;
else if(pos==1)
cnt+=before*i+after+1;
i*=10;
}
return cnt;
}
int main()
{
while(scanf("%d",&n)!=EOF)
printf("%d\n", account(n));
}
本文提供了一道51NOD编号为1009的题目解析及完整代码实现。该题是一道典型的思维题,通过解析数字构成规律来计算特定条件下的计数问题。
3万+

被折叠的 条评论
为什么被折叠?



