计数问题

题目描述:
给定两个整数a和b,计算1在a和b之间出现的次数
输入:
输入不会超过500行,每一行有两个整数a和b,a和b的范围是0-100000000.输入两个0时程序结束。
输出:
对于每一对输入a和b,输出一个数表示1出现的次数
思路:
诸位处理

#include <iostream>
using namespace std;
int N[10], number = 1;
int value;

void deal(int n)
{
    if(n <= 0)
        return;
    int one, ten;
    one = n % 10;
    ten = n / 10;
    n /= 10;
    for(int i = 0 ; i < one ; i++)//个位
        N[i] += value;
    while(ten){                   //因为个位非个位
        N[ten%10] += one+1;
        ten /= 10;
    }
    for(int i =  0 ; i < 10 ; i++) //个位
        N[i] += value * n;
    N[0] -= value;                //排除第一位是0的情况(eg:没有两位数00)
    value *= 10;
    deal(n-1);
}
int main()
{
    int a, b, n, answer[500];
    n = 0;
    while(true)
    {
        cin>>a>>b;
        if(!a && !b)
            break;
        for(int i = 0 ; i < 10 ; i++)
            N[i] = 0;
        value = 1;
        deal(b);
        value = -1;
        deal(a);
        answer[n++] = N[number];
    }
    for(int i = 0 ; i < n ; i++)
        cout<<answer[i]<<endl;
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值