3

与えられた数字の桁を区切るプログラムを書きました。数値がゼロ以外で構成されている場合は正常に分離されますが、内部に0を含む数値がある場合は認識されず、印刷されません。私は何をすべきか?私は気が狂います!

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

int quotient (int a, int b);
int remaindar (int a, int b);

int main(void) {

int a,b,number,temp=1,divisor=10000;

printf("Enter three integers: ");
scanf("%d %d %d",&a,&b,&number);

printf("a/b is %d , remainder is %d.\n",quotient(a,b),remaindar(a,b));

temp=number;

while (temp>=1){

        if(temp>=divisor){

            printf("%d  ", quotient(temp,divisor)); 
            temp=remaindar(temp,divisor);
            divisor=divisor/10;
        }

        else divisor=divisor/10;

}


getch();    

return 0;   
}

int quotient (int a, int b){

return a/b; 

}

int remaindar (int a, int b){

return a%b;

}
4

2 に答える 2

1

これは、temp が数値および除数よりも小さい場合、つまり数字が 0 である場合を考慮していないために発生302します。1020

while (divisor > 0){
        if(temp>=divisor){
            printf("%d  ", quotient(temp,divisor));
            temp=remaindar(temp, divisor);
        } else if (temp < number) {
            printf("0 ");
        }
        divisor=divisor/10;
}   
于 2013-04-14T19:54:06.953 に答える
1

あなたの情報に基づいて: 3 番目の数は、商と剰余とは何の関係もありません。次のように、数字の桁を左から右に単純に区切ることができます。

 #include <iostream>
 void getDigits(int number)
{
    int div = 1;
    //find max divisor, i.e., given 6900, divisor 1000
    //this gives information about how may digits the number has
    while (number / div >= 10) {
      div *= 10;
    } 

    //extract digits from left to right
    while (div != 0) //^^pay attention to this condition, not number !=0
    {
        int currDigit = number /div;
        number %= div;  
           //^^you can change the above two lines to 
          //your quotient and remainder function calls
        div /=10;
        std::cout << currDigit << " "; 
    }
}

int main(){
    int number = 6900;
    std::cout << "test case 1 " <<std::endl;
    getDigits(number);
    int number1 = 5067;
    std::cout << "\ntest case 2 " <<std::endl;
    getDigits(number1);
    int number2 = 12345;
    std::cout << "\ntest case 3 " <<std::endl;
    std::getDigits(number2);
    return 0;
}

getch()非推奨の は使用しないでください。上記のコードを使用すると、次の出力が表示されます。

test case 1
6 9 0 0
test case 2
5 0 6 7
test case 3
1 2 3 4 5
于 2013-04-14T19:51:22.353 に答える