剑指offer,leetcode,PAT
转载地址(下面的博文讲解的很清楚,容易明白)
http://blog.csdn.net/yi_afly/article/details/52012593
PAT题目联系
https://www.patest.cn/contests/pat-a-practise/1049
ac代码
#include <cstdio>
#include <memory>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <list>
#include <stack>
#include <map>
#include <set>
using namespace std;
#define INF 0x7fffffff
const int N = 505;
int main()
{
//freopen("in.txt", "r", stdin);
int n;
while(scanf("%d", &n) != EOF)
{
if(n<1)
{
printf("0\n");
continue;
}
int base = 1;
int count = 0;
int round = n;
while(round > 0) // 依次遍历 每一位的数字
{
int weight = round%10; // 当前位的值
round/=10; // 去除当前位,前面的数字值
count += round*base;
/**
* 比如 514 ,十位是1
10个数: 010 011 012 ... 019
10个数: 110 111 112 ... 119
10个数: 210 211 212 ...
...
10个数: 410 411 ...
5个数: 510 511 512 513 514, 最后一轮需要看个位数是多少了
*/
if(weight == 1) // 当前位的值就是1,需要看当前位后面的数是多少
{
count += (n%base) + 1;
}
else if(weight > 1) // 当前位值大于1 那么最后一轮还是base个数
{
count += base;
}
base*=10;
}
printf("%d\n", count);
}
return 0;
}