LuckyZZR 2016-07-04 13:57 采纳率: 50%
浏览 2486
已结题

RQNOJ 计数的梦 (程序改错)

RQNOJ上的一道题:
Bessie 处于半梦半醒的状态。过了一会儿,她意识到她好像在数羊,不能入睡。Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码:每一个数码在计数的过程中出现过多少次?
给出两个整数 M 和 N (1 <= M <= N <= 2,000,000,000 以及 N-M <= 500,000),求每一个数码出现了多少次。
例如考虑序列 129..137: 129, 130, 131, 132, 133, 134, 135, 136, 137。统计后发现:
1x0 1x5
10x1 1x6
2x2 1x7
9x3 0x8
1x4 1x9
输入格式
共一行,两个用空格分开的整数 M 和 N
输出格式
共一行,十个用空格分开的整数,分别表示数码(0..9)在序列中出现的次数。
样例输入
129 137

样例输出
1 10 2 9 1 1 1 1 0 1
我的程序
#include
#include
using namespace std;

int main()
{
int a, b;
int i;
int high, low;
int zero;
int acnt[10] = {0}, bcnt[10] = {0};
cin >> a >> b;
cout << a;
a = a-1;
for(i=0; i {
if(i == 0)
{
zero = 10;
}
else
{
zero = 1;
}
high = 10, low = 1;
while(a/low/zero&&b/low/zero)
{
if((a%high)/low == i)
acnt[i] += (a/high-zero/10)*low+(a%low+1);
if((a%high)/low > i)
acnt[i] += (a/high+1-zero/10)*low;
if((a%high)/low < i)
acnt[i] += (a/high-zero/10)*low;
high *= 10;
low *= 10;
}
while(b/low/zero)
{
if((b%high)/low == i)
bcnt[i] += (b/high-zero/10)*low+(b%low+1);
if((b%high)/low > i)
bcnt[i] += (b/high+1-zero/10)*low;
if((b%high)/low < i)
bcnt[i] += (b/high-zero/10)*low;
high *= 10;
low *= 10;
}
}
for(i=0; i<10; i++)
{
if(i != 0)
cout << " ";
cout << bcnt[i]-acnt[i];
}
cout << endl;
return 0;
}

测试结果10: 测试结果错误.错误结果为:600007 200000 100001 100000 100000 100000 100000 100001 300001 100008
正确结果应为:600007 400002 100001 100000 100000 100000 100000 100001 300001 100008
不知道是哪错了。。

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-07-04 16:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services