一个数字出现在一个数字的次数

时间:2015-12-07 12:40:03

标签: c arrays

好吧,我写了代码,一切都很好,除了一件事。 当我输入该数字时,必须达到10位数,我收到arr [0]的各种值,例如,如果我输入" 12345"我得到20,1,1,1,1,1,0,0,0,0。

从arr [1]到arr [9]哪个好,但在arr [0]中很奇怪。

有什么想法吗?

#include <stdio.h>
#include <conio.h>
#include <math.h>



void main()
{
    int i,j,p=0, temp,indexNum, arr[10] = { 0 }, num, level = 10, level2 = 1,maxIndex;
    printf("Please enter a digit number (upto 10 digits) \n");
    scanf("%d", &num);
    temp = num;
    while (temp > 0)
    {
        p++;
        temp /= 10;
    }
    for (i = 0;i < p;i++)
    {
        temp = num;
        while (temp > 0)
        {
            indexNum = num % level / level2;
            arr[indexNum]++;
            level *= 10;
            level2 *= 10;
            temp /= 10;
        }
    }
    for (j = 0; j < 10; j++)
    {
        printf("%d\n", arr[j]);
    }
    getch();
}

5 个答案:

答案 0 :(得分:3)

以下是您的计划的简化版本:

#include <stdio.h>
#include <math.h>

int  main()
{
    int i = 0, j = 0, temp = 0, indexNum = 0, num = 0, level = 10;
    int arr[10] = {0};

    num = 7766123;

    temp = num;
    if(0 == temp) arr[0] = 1; // Handle 0 input this way
    while (temp > 0)
    {
        indexNum = temp % level;
        arr[indexNum]++;

        temp /= 10;
    }

    for (j = 0; j < 10; j++)
    {
        printf("%d\n", arr[j]);
    }

  return 0;

}

答案 1 :(得分:1)

一些提示可以帮助您:

  1. arr [10] = {0}实际上做了什么?

  2. 计算indexNum时,除以整数。模数是一位数,而level2大于1时会发生什么?

答案 2 :(得分:1)

可能更容易将输入读入字符串并计算数字字符。这样的事情(未经测试):

std::map<char, int> count;
std::string input;
std::cin >> input;
for (auto iter = input.begin(); iter != input.end(); ++iter) {
    if (*iter < 0 || *iter > 9)
        break;
    else
        ++count[*iter];
}
for (auto iter = count.begin(); iter != count.end(); ++iter) {
    std::cout << *iter << '\n';
}

答案 3 :(得分:0)

你需要摆脱你的第一个for循环。更像是:

#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
    int j;
    int  temp;
    int  indexNum;
    int  arr[10] = { 0 };
    int  num;
    int  level = 10;
    int  level2 = 1;
    printf("Please enter a digit number (upto 10 digits) \n");
    scanf("%d", &num);
    temp = num;
    while (temp > 0)
    {
        indexNum = num % level / level2;
        arr[indexNum]++;
        level *= 10;
        level2 *= 10;
        temp /= 10;
    }
    for (j = 0; j < 10; j++)
    {
        printf("%d\n", arr[j]);
    }
    return 0;
}

答案 4 :(得分:0)

检查以下程序。

void count_digits(unsigned int a, int count[])
{
     unsigned int last_digit = 0;

     if (a == 0) {
         count[0] = 1;
     }
     while (a != 0)
     {
         last_digit = a%10;
         count[last_digit]++;
         a = a/10;
     }

}

int main()
{
    int count[10]= {0};
    unsigned int num = 1122345; /* This is the input, Change it as per your need */
    int i = 0;
    count_digits(num, count);

    for (i = 0; i < 10; i++)
    {
        printf ("%d: -- %d\n", i, count[i]);
    }
    return 0;
}