質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

皆様のお答えを聞かせてください。打ちこんだ整数を逆に並べて出力する

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,581

score 258

このコードはマイナスの値を打つと、アラームが鳴り整数値を打つように
指示します。そして整数値が打ちこまれると、それを10で割り余りを出す、10で割るという繰り返しで引っくり返した数字を出力する事ができます。
しかし、個人的にはこの方法があまり好きではありません、
もっと効率的で短くこの結果を出す事ができますか?
もしくはこのコードとは考え方が異なる答えも知りたいです。
(柔軟にコードを考えたいからです。)
皆様のお答えを聞かせてください。
'#include<stdio.h>
    int main(void){
  int num;
do{
printf("dont type negative" );scanf("%d",&num );
if(num<0) puts("\aDont put negative ");

}while (num<0);

printf("read reversly");
do{
printf("%d",num%10 );
num=num/10;
}
while (num>0);
puts("result");
      return 0;
}
'
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ikuwow

    2015/08/24 20:25

    コードはMarkdown記法の```でシンタックスハイライトしていただけると助かります。

    キャンセル

回答 2

checkベストアンサー

0

反転部分だけですが、こんなのはどうでしょう?
~/test >./a.out
12345
54321
~/test >cat tst15.c
#include <stdio.h>

int main()
{
    int num= 0, ans= 0;
    char buf[256];
    //
    fgets( buf, sizeof buf, stdin);
    sscanf( buf,"%d", &num);
    //
    do{
        ans = ans * 10 + num % 10;
    }while( num /= 10 );
    //
    printf( "%d\n", ans);
    return 0;
}

~/test >
ただこれだと、先頭が0の場合反転されません。文字列で処理する方法も考えたほうがいいのかも?
~/test >./a.out
0123456
654321
~/test >
題意とは外れているかもしれませんが・・・

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/24 21:53

    こういう考えもありますね、参考にさせていただきます。
    ありがとうございました!

    キャンセル

  • 2015/08/24 22:29

    fgets()→sscanf()の流れはscanf()での問題(入力バッファに'\n'が残る)の回避対策です。今回のような1回だけの入力なら大丈夫ですが、scanf()が複数ある場合など注意が必要です。あと、printf()はかなり重たい処理なので、出来ればループの中では使わないほうがいいです。(デバッグ以外)数値→数字変換に固定するなら自作したほうがはるかに(7~10倍程度)早くなります。

    キャンセル

  • 2015/08/24 22:46

    printfが重いという事はしりませんでした、prinfの代わりにはputsなんかを使えばいいでしょうか?

    キャンセル

  • 2015/08/25 08:58

    printf()は数値以外にもいろいろな変換を、パラメータに従って行う必要があるため処理が複雑になっています。その為、整数値→文字列変換などは自作してputs()などで出力したほうが早くなります。・・・あと、ちょっと思ったのですが、入力した文字列を反転してから数値に変換すれば、先頭の0も正常に処理されます。(int,longの範囲内が前提です)。また、文字列だけを反転したいのなら確保した文字列のバッファ以内なら文字列長には関係なく反転できますね。

    キャンセル

0

既に解決済みですが・・・

入力された整数を逆順に「表示」することだけが目的ならば、わざわざ「10で割り余りを出す」必要はないのでは?と考えます。
そのように割り切れば、入力された整数を「文字列」とみなして単純に逆順に表示するだけで良いと思います。

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

int main(void) {
  int num, n, i;
  char s1[11] = {'\0'};
  char s2[11] = {'\0'};
  do {
    printf("Don't type negative : " );
    scanf("%d",&num );
    if (num<0) printf("\a");
  } while (num<0);

  sprintf(s1, "%d", num);
  n = strlen(s1);
  for (i=0; i<n; i++) {
    s2[i] = s1[n-i-1];
  }

  printf("input   : %s\n", s1);
  printf("reverse : %s\n", s2);

  return 0;
}
それと、入力されるのが「整数」という制限があるのであれば、0から始まるケースは考慮不要かと思います。

 $ ./a.out
Don't type negative : 01234
input   : 1234
reverse : 4321
$

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る