5

printf、putcharなどを使用せずにCで整数を出力する必要がある割り当てがあります。ヘッダーファイルを含めることはできません。私が書いたものを除いて、関数呼び出しはありません。私が使用している関数 my_char が 1 つあります (おそらく間違っています) が、文字が出力されます。私は現在、番号を逆に出力している次のコードを持っています。答えを探していません。方向性や助けを探しているだけで、完全に間違っているかもしれません。

void my_int(int num)
{   
  unsigned int i;    
  unsigned int j;

  char c;

  if (num < 0)    
    {
      my_char('-');
      num = -num;
    }

  do    
    {
      j = num % 10;
      c = j + '0';
      my_char(c);
      num = num/10;
    }while(num >0);
}
4

3 に答える 3

5

ループ内で my_char() を呼び出す代わりに、文字をバッファに「出力」し、バッファを逆方向にループして出力します。

配列を使用できないことが判明しました。その場合、ループを使用して 10 の最大乗数 (つまり log10) を計算できます。次に、これを使用して最初の桁から逆方向に作業します。

unsigned int findMaxPowOf10(unsigned int num) {
    unsigned int rval = 1;
    while(num) {
        rval *= 10;
        num /= 10;
    }
    return rval;
}

unsigned int pow10 = findMaxPowOf10(num);

while(pow10) {
    unsigned int digit = num / pow10;
    my_char(digit + '0');
    num -= digit * pow10;
    pow10 /= 10;
}
于 2012-09-09T22:57:45.167 に答える
3

1 つのオプションは、これを再帰的に行うことで、番号が正しい順序で出力されるようにすることです。

この場合、do/while ループの代わりに、num=0 の基本ケースを使用して、このような構造になります。

if(num==0)
    return;

j = num % 10;
c = j + '0';
my_int(num/10);
my_char(c);

編集:再帰の使用が許可されていないことに気付きました。少し見にくいですが、数字の桁をチェックしてから、数字を逆方向にループすることができます。

桁数を求めるには、

int digitDivide = 1;
int tempNum = num;
while(tempNum>0){
    tempNum= tempNum/10;
    digitDivide=digitDivide*10;
}

それを使用して、次のように番号をループします。

digitDivide = digitDivide/10;
while(digitDivide>0){
    tempNum = (num/digitDivide)%10;
    c = j + '0';
    my_char(c);
    digitDivide=digitDivide/10;
}
于 2012-09-09T22:56:50.007 に答える
0

int を char * 、 char * に変換して、この char* を表示できます。

char        *put_int(int nb)
{
 char       *str;

 str = malloc(sizeof(char) * 4);
 if (str == NULL)
   return (0);
 str[0] = (nb / 100) + '0';
 str[1] = ((nb - ((nb / 100 * 100 )) / 10) + '0');
 str[2] = ((nb % 10) + '0');
 return (str);
}

void        put_str(char *str)
{
 while (*str)
   write(1, str++,1);
}

int main(void)
{
 put_str(put_int(42));
 return (0);
}
于 2016-06-04T12:58:07.293 に答える