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

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

ただいまの
回答率

90.50%

  • C

    4539questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

入力した数字の各桁の和を表示するプログラム

解決済

回答 3

投稿

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

aufheben

score 9

前提・実現したいこと

入力した数の各桁の和を求めるプログラムを作りたいです

発生している問題・エラーメッセージ

桁を分離する関数がうまく機能しません

該当のソースコード

#include<stdio.h>
#include<math.h>
int Darksouls(int,int);
int main() {
    int N = 0;
    int i, Moralk=0, j = 0;
    int Demons[10];
    printf("1から2147483647までの整数を入力してください:");
    scanf_s("%d", &N);
    /*桁数の取り出し*/
    while (N != 0) {
        N = N / 10;
        j++;
    }

    /*抽出足し算、抽出は関数にやらせる*/
    for (i = 0; i < j; i++) {
        Demons[i] = Darksouls(N, i);
        printf("%d\n", Darksouls(N, i));
    }
    for (i = 0; i < j; i++) {
        Moralk += Demons[i];
    }
    printf("%d\n", Moralk);
    return 0;
}

int Darksouls(int x, int y) {
    return (int)(x / pow(10, y)) % 10;
}


1から2147483647までの整数を入力してください:12345
0
0
0
0
0
0
続行するには何かキーを押してください . . .

試したこと

#include<stdio.h>
#include<math.h>
int main() {
    int X=0, i, n;
    int mat[5];

    printf("入力");
    scanf_s("%d", &n);

    mat[0]=(int)(n/pow(10,0))%10;
    mat[1]=(int)(n/pow(10,1))%10;
    mat[2]=(int)(n/pow(10,2))%10;
    mat[3]=(int)(n/pow(10,3))%10;
    mat[4]=(int)(n/pow(10,4))%10;

    for (i = 0; i < 5; i++) {
        X += mat[i];
    }
    printf("%d", X);
    return 0;
}


入力12345
15続行するには何かキーを押してください . . .
こっちだと5桁でうまくいきました。

補足情報(言語/FW/ツール等のバージョンなど)

VS2017を使っています
より詳細な情報

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

0

原因は桁数を取り出す際にNが0になってるからですね。
単純な方法ですが、もう一つint型の変数を宣言してその変数を使って桁数を取り出してみてはどうでしょう。

/*tmp変数*/
int tmp_N = N;
while (tmp_N != 0) {
    tmp_N = tmp_N / 10;
    j++;
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

    while (N != 0) {
        N = N / 10;
        j++;
    }


の後、Nがどのような値になっているかprint("%d\n", N)などで確認してみましょう。
(桁数jを数えるループ中にN値を変更してるが、よいでしょうか?)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

「該当のソースコード」は、以下の部分でNの値を0にしています。

    while (N != 0) {
        N = N / 10;
        j++;
    }

その後でNを使って計算しようとしても、0なので元々のNの値の各桁の数値は求めようがありません。
これが0ばかりの結果になる理由です。

=ヒント=

1桁目(一位の数値)は、 N % 10 で求められます。
この値を m とすると、2桁目は、 (N - m)/10 の一桁目ですから、 ((N - m)/10) % 10で求められます。
同様にして、下から順に桁の数値を求めていって、最後に上の桁から数値を出力すれば良いわけです。

求められた各桁の数値は、配列にいれてゆくと理解しやすいコードになりますよ。

やってみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • C

    4539questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。