【发布时间】:2019-03-09 22:53:19
【问题描述】:
我需要做什么:
用户输入从 S 到 K 的一系列数字的程序。它应该计算在数字中找到一个数字的次数,最后按以下顺序打印出来:0 1 2 3 4 5 6 7 8 9。
我的代码:
OBS:它不适用于 10 位以上的数字。
#include <iostream>
using namespace std;
int main()
{
int S, K;
cin >> S >> K;
int digits = 0;
int dig0 = 0;
int dig1 = 0;
int dig2 = 0;
int dig3 = 0;
int dig4 = 0;
int dig5 = 0;
int dig6 = 0;
int dig7 = 0;
int dig8 = 0;
int dig9 = 0;
int remainder = 0;
for (int i = S; i <= K; i++) {
if (i < 10) {
switch(i) {
case 0:
dig0++;
break;
case 1:
dig1++;
break;
case 2:
dig2++;
break;
case 3:
dig3++;
break;
case 4:
dig4++;
break;
case 5:
dig5++;
break;
case 6:
dig6++;
break;
case 7:
dig7++;
break;
case 8:
dig8++;
break;
case 9:
dig9++;
break;
}
} else if (i >= 10) {
while (i > 0) {
remainder = i % 10;
switch(remainder) {
case 0:
dig0++;
break;
case 1:
dig1++;
break;
case 2:
dig2++;
break;
case 3:
dig3++;
break;
case 4:
dig4++;
break;
case 5:
dig5++;
break;
case 6:
dig6++;
break;
case 7:
dig7++;
break;
case 8:
dig8++;
break;
case 9:
dig9++;
break;
}
i /= 10;
}
}
}
cout << dig0 << ' ' << dig1 << ' ' << dig2
<< ' ' << dig3 << ' ' << dig4 << ' ' << dig5
<< ' ' << dig6 << ' ' << dig7 << ' ' << dig8 << ' ' << dig9;
return 0;
}
期望的行为:
测试用例 01
输入:1 到 9
输出:0 1 1 1 1 1 1 1 1 1(因为有0位 0,从 1 到 9 每个数字的 1 位)
测试用例 02
输入:767 772
输出:1 1 1 0 0 0 3 10 1 1
【问题讨论】:
-
你的外部for循环应该被用作你的算法的值;它不应该被修改。 IE。
while (i > 0)循环逻辑实际上是在修改外循环的控制变量;i。不要那样做。获取i的值,将其放入临时变量中,然后通过您的while 循环逻辑运行that。 Fwiw,调试器 会逐行显示,问题会立即显而易见。学会使用一个。 -
@WhozCraig 我使用 CodeBlocks,我能够完全正常地运行该程序。那么,我应该创建一个新变量并将 i 存储在其中,然后...?
-
我从来没有说过你不能运行它;我说过在那个循环中修改
i的逻辑是broken。查看 bruno 的回答并注意他如何使用v进行模数/div 更改,而i只是序列计数器。 -
@bruno 我还没有机会在电脑上查看答案。不过我会的。
-
@N.T.我编辑了我的建议以允许 S 和 K 的任何 int 值