PTA个位数统计&大笨钟



#include <stdio.h>

#include <stdlib.h>

#include<string.h>

 

int main()

{

   
int i,a[10];

   
char n;

   
for(i=0;i<10;i++)

    {

       
a[i]=0;

    }

   
n=getchar();

   
while(n!=EOF)

    {

       
a[n-'0']++;

       
n=getchar();

    }

   
for(i=0;i<10;i++)

    {

       
if(a[i]!=0)

       
{

           
printf("%d:%d\n",i,a[i]);

       
}

    }

   
return 0;

}


char转int:n-'0’



#include <stdio.h>

#include <stdlib.h>

int main()

{

   
int i,cout;

   
char n,a[6];

   
gets(a);

   
cout=(a[0]-'0')*10+(a[1]-'0')-12;

   
if(a[3]-'0'!=0||a[4]-'0'!=0)

       
cout++;

   
if(cout<=0)

    {

       
printf("Only %s.  Too early
to Dang.",a);

    }

   
else

    {

       
for(i=0;i<cout;i++)

           
printf("Dang");

    }

   
return 0;

}

输入的时候用英文,中文冒号占两格,且输出时会乱码

&lt;think&gt;嗯,用户想找关于PTA平台上用C++实现个位数统计的代码和解思路。首先,我需要回忆一下PTA的相关目,可能是指统计一个整数中各个位数的出现次数。比如目可能给出一个很的数,比如100311,然后要输出每个数字出现的次数,比如0出现2次,1出现3次,3出现1次。 根据用户提供的引用,特别是引用2、3、4,里面提到了C++的解决方案,其中使用字符串处理可能更方便。因为输入的数字可能非常,超过整数类型的范围,所以用字符串处理更合适。比如引用3中的代码用了string类,然后遍历每个字符,将字符转换为数字索引,统计到数组中。 用户可能需要具体的步骤和代码示例。首先,解思路应该是这样的:将输入作为字符串处理,遍历每个字符,将字符转换为数字(比如s[i] - &#39;0&#39;),然后对应的计数器数组增加。最后遍历计数器数组,输出非零的统计结果。 需要注意的细节包括:输入可能包含前导零吗?根据目描述,应该不需要,因为输入是给定的整数,但实际处理时应该按照字符串原样处理。例如引用4提到输入格式是k位整数,可能高位可能有前导零?或者目中说明dk-1&gt;0,所以最高位非零,但输入可能是一个字符串,需要处理所有字符。 另外,代码实现方面,C++中可以用cin读取字符串,然后初始化一个小为10的数组,初始化为0。然后循环每个字符,将字符转为数字,对应数组位置加一。最后循环数组,输出次数不为零的结果。 用户可能遇到的问包括如何处理字符到数字的转换,比如忘记减去&#39;0&#39;导致ASCII码的问,如引用3中提到必须减去&#39;0&#39;才能得到正确的数字值。另外,测试用例可能有边界情况,比如所有数字相同,或者输入只有一位数,比如引用5提到输入是两个个位数的情况需要注意。 因此,在回答时应该强调字符串处理的必要性,转换字符为数字的方法,以及如何处理各种边界情况。同时,给出代码示例,并解释关键步骤,比如数组初始化、遍历字符串、输出格式等。&lt;/think&gt;### PTA个位数统计C++实现方法 #### 解思路 1. **输入处理**:由于输入数字可能超过整型范围(例如$10^{1000}$),直接使用字符串存储更高效[^2][^4]。 2. **统计逻辑**: - 初始化长度为10的数组`count[10]`,对应数字$0$到$9$的计数器。 - 遍历字符串每个字符,将其转换为数字$d_i$(通过`字符 - &#39;0&#39;`实现),对应计数器$count[d_i]$自增[^3][^4]。 3. **输出结果**:遍历`count`数组,仅输出出现次数于$0$的数字及其次数。 #### 代码实现 ```cpp #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { string num; int count[10] = {0}; // 初始化计数器数组 cin &gt;&gt; num; // 输入数字字符串 for (char c : num) { int digit = c - &#39;0&#39;; // 字符转数字(关键步骤) count[digit]++; // 对应计数器自增 } for (int i = 0; i &lt; 10; i++) { if (count[i] &gt; 0) { cout &lt;&lt; i &lt;&lt; &quot;:&quot; &lt;&lt; count[i] &lt;&lt; endl; // 输出结果 } } return 0; } ``` #### 注意事项 1. **字符转换**:必须通过`c - &#39;0&#39;`将ASCII字符转换为实际数字,否则会得到错误结果(例如字符`&#39;3&#39;`的ASCII码是$51$)。 2. **边界情况**:输入为单个字符(如`&quot;0&quot;`)或全相同数字时,程序需正确处理[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值