首页 > 编程知识 正文

牛客剑指offer,牛客剑指

时间:2023-05-06 07:45:08 阅读:201426 作者:3666

题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。



class Solution {public: //出每一位的贡献相加即可 int NumberOf1Between1AndN_Solution(int n) { int digit[15]; //由于没有给出数据范围,这里只能取15位试试 long long int w[15]; int t = n, len = 0, ans = 0; while (t) { digit[len++] = t%10; t = t/10; } w[0] = 1; for(int i = 1; i < 15; ++i) w[i] = w[i-1] * 10; //计算贡献,比如十位上的1每100个数就有10个数十位为1,个位上的1每10个数就有1个个位为1 for (int i = 0; i < len; ++i) { ans += n / w[i+1] * w[i]; if (digit[i] > 1) ans += w[i]; else if (digit[i] == 1) ans += n % w[i] + 1; } return ans; }};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。