#include<stdio.h>
int main(){
int N;
scanf("%d",&N);
int flag=0;
for(;N!=0;){
N/=10;
flag++;
}
int num[flag];
int num_record[10]={0};
for(int i=0;i<flag;i++){
for(;N!=0;){
num[i]=N%10;
N/=10;
num_record[num[i]]++;
}
}
for(int i=0;i<=9;i++){
if(num_record[i]>0){
printf("%d:%d\n",i,num_record[i]);
}
}
}
我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!
因为输入的整数最多1000位,所以需要使用字符数组来存储它,然后可以遍历这个数组的每个元素,然后再增加对应的数字个数,循环结束再打印结果即可。
修改如下:
#include<stdio.h>
#include <string.h>
int main(){
//int N;
// 因为输入的正整数最多1000位,所以这里用一个长度为1001的字符数组来存储输入的整数
char str[1001];
//scanf("%d",&N);
scanf("%s",str); // 以字符串的形式从输入获取这个正整数
// int flag=0;
// for(;N!=0;){
// N/=10;
// flag++;
// }
// int num[flag];
int num_record[10]={0}; //存储数字出现次数的数组,每个元素初始化为0
// for(int i=0;i<flag;i++){
for(int i=0;i<strlen(str);i++){ // 遍历输入的数字字符串
// for(;N!=0;){
// num[i]=N%10;
// N/=10;
// num_record[num[i]]++;
// }
char ch = str[i]; // 获取当前位置的字符
if(ch>='0'&&ch<='9'){ // 这个条件是判断字符是否是数字字符,这个不加也可以
num_record[ch-'0']++; // 将对应数字的个数+1
}
}
// 打印结果
for(int i=0;i<=9;i++){
if(num_record[i]>0){
printf("%d:%d\n",i,num_record[i]);
}
}
}
供参考:
#include <stdio.h>
int main()
{
int i = 0, a[10] = { 0 };
char s[1001];
scanf("%s", s);
while (s[i]) {
a[s[i]-'0']++;
i++;
}
for (i = 0; i < 10; i++)
if (a[i])
printf("%d:%d\n", i, a[i]);
return 0;
}
你的这题代码有点问题,稍等片刻
【以下回答由 GPT 生成】
在你的代码中,主要有两个问题需要解决:
数组 num
的大小问题:你在定义数组 num
的时候使用变量 flag
作为数组大小,但是 flag
目前是在一个循环中定义的,无法用作数组大小的参数。正确的做法是,首先计算出 N
的位数,然后根据位数定义 num
数组的大小。
内层循环的问题:在第二个循环中,你使用了一个 for(N!=0;)
的循环,但是在上一个循环中, N
已经变成了 0,导致内层循环不会执行。解决这个问题的方法是,在内层循环之前,将 N
的值保存到一个新的变量中,这样内层循环就可以使用正确的 N
值了。
以下是修改后的代码:
#include<stdio.h>
int main(){
int N;
scanf("%d",&N);
// 计算N的位数
int temp = N;
int flag=0;
while(temp!=0){
temp /= 10;
flag++;
}
// 定义num数组
int num[flag];
int num_record[10]={0};
temp = N; // 保存N的值
for(int i=0;i<flag;i++){
num[i]=temp%10;
temp/=10;
num_record[num[i]]++;
}
for(int i=0;i<=9;i++){
if(num_record[i]>0){
printf("%d:%d\n",i,num_record[i]);
}
}
}
希望这个解决方案能够帮助到你!如果还有其他问题,请随时提问。
【相关推荐】