分割数字的简单程序不显示零

时间:2016-03-13 10:00:07

标签: c

我在c中编写了一个简单的程序,它接受两个数字,然后将第一个数字分成第二个数字,如下所示:

  

输入:
  362903157 2313

     

输出:

     

36   290   3   157

一切正常,除非第一个数字中有零,我的程序会跳过它们。例如,上面的示例给出了这个输出:

  

36 293 1 570

那就是我的代码:

#include <stdio.h>

int nDigits(unsigned i) {
    int n = 1;
    while (i > 9) {
        n++;
        i /= 10;
    }
    return n;
}

// find the highest multiple of 10
int multipleOfTen(int num){
    int multiple = 1;
    while(multiple <= num){
        multiple *= 10;
        if(multiple > num){
            multiple /= 10;
            break;
        }       
    }
    return multiple;
}

int main(){
    int n, m, digit; 

    scanf("%d %d", &n, &m);

    int lengthOfM = nDigits(m); 

    for (int i = 0; i < lengthOfM; i++){
        digit = m / multipleOfTen(m); //2

        for(int j = 1; j <= digit; j++){
            printf("%d", n/multipleOfTen(n));
            n = n% multipleOfTen(n);
        }
        printf("\n");

        m = m % multipleOfTen(m);
    } 

    return 0;
}

我应该在程序中更改哪些内容,以便不会忽略零?

3 个答案:

答案 0 :(得分:4)

不是在每个循环中调用multipleOfTen(),而是调用它一次并保存n和m的结果。然后在每个循环中将这些结果除以10

#include <stdio.h>

int nDigits(unsigned i) {
    int n = 1;
    while (i > 9) {
        n++;
        i /= 10;
    }
    return n;
}

// find the highest multiple of 10
int multipleOfTen(int num){
    int multiple = 1;
    while(multiple <= num){
        multiple *= 10;
        if(multiple > num){
            multiple /= 10;
            break;
        }
    }
    return multiple;
}

int main(){
    int n, m, digit;
    int i, j;
    int n10, m10;

    scanf("%d %d", &n, &m);
    int lengthOfM = nDigits(m);

    n10 = multipleOfTen(n); //get the multiple of ten once
    m10 = multipleOfTen(m); 

    for ( i = 0; i < lengthOfM; i++){
        digit = m / m10;
        m10 /= 10;
        for( j = 0; j < digit; j++){
            printf("%d", n/n10);
            n = n% n10;
            n10 /= 10;// divide by 10
        }
        printf("\n");
        m = m % multipleOfTen(m);
    }
    return 0;
}

答案 1 :(得分:3)

我认为这样的做法是不可接受的?

#include <stdio.h>
#include <string.h>

int main ( void ) {
    char    n[64];
    char    m[64];
    char *  p   = n;
    int     i   = 0;
    int     c;

    scanf("%63[0-9] %63[0-9]", n, m);
    while ((c = m[i++]) != '\0') {
        int j = c - '0';
        while (j-- > 0) if (*p) putchar(*p++);
        putchar(' ');
    }
    putchar('\n');
    return 0;
}

答案 2 :(得分:0)

FalconDev1n=903157 n = n% multipleOfTen(n);变为n而不是3157时,所以当你再次划分03157行时,会打印{{1}不是printf("%d", n/multipleOfTen(n));你想要的!! 修复代码以产生正确的输出。