各桁の和

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
こうき

各桁の和

#1

投稿記事 by こうき » 7年前

問題:与えられた数の各桁の和を計算するプログラムを作成して下さい。複数のデータセットが入力として与えられます。各データセットは1つの整数 x を含む1行で与えられます。
x は 1000 桁以下の整数です。

という問題で、自分は次のように解きました。

コード:

#include<stdio.h>
int main(void)
{
int b,c,d,e,f;
scanf("%d",&b);
0<=c&&c<=9;
0<=d&&d<=9;
0<=e&&e<=9;
0<=f&&f<=9;
1000c+100d+10e+f=b;
printf("%d",c+d+e+f);
return 0;
}
しかし、これではエラーが出てしまい、うまく動作しませんでした。
数学的に考えると、合っていると思うのですが、これをプログラムにするとうまく動作しませんでした。


どこが間違えているのでしょうか?

よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

Re: 各桁の和

#2

投稿記事 by h2so5 » 7年前

まずC言語の基礎的な文法を勉強されたほうが良いと思います。
これでは単なる条件の羅列にしかなっていないため、プログラムとは呼べません。

こうき

Re: 各桁の和

#3

投稿記事 by こうき » 7年前

ご回答ありがとうございます。

一通り文法は本とネットで勉強してきました。

どの範囲がプログラムとは呼べないのでしょうか?

初歩的な質問すみません。よろしくお願いします。

ISLe
記事: 2648
登録日時: 9年前
連絡を取る:

Re: 各桁の和

#4

投稿記事 by ISLe » 7年前

コードを書く前に確認しなければいけないことがあります。

1000桁って千の位ってことですか?

nil
記事: 428
登録日時: 8年前

Re: 各桁の和

#5

投稿記事 by nil » 7年前

6~9行目です。
10行目は文法的に全く正しくありません。
なので文法を勉強したほうが良いとh2so5さんは仰ったのです。

こうき

Re: 各桁の和

#6

投稿記事 by こうき » 7年前

ご回答ありがとうございます。

ISLe さん

そうです。千の位のことを言っています。

例えば、1021とか243とかのことです。

涼雅 さん

ほとんど違うということですね・・・

どこから勉強していけばいいのか、途方に暮れてしまいました。

今の自分はどの範囲の文法が抜けているのでしょうか?

よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 各桁の和

#7

投稿記事 by softya(ソフト屋) » 7年前

数学的には正しくても、数学言語ではないC言語では正しくないと言うことです。
まず、=は等しいではありません代入です。これが第一に理解すべきことです。
それと右辺と左辺で役割が決まっています。右辺の計算結果が左辺に代入されます。
なので、1000c+100d+10e+f=b;は大きく間違っています。

それとscanf("%d",&b);はbにしか値を入れていないので、c,d,e,fの値は不定です。

それと
0<=c&&c<=9;
0<=d&&d<=9;
0<=e&&e<=9;
0<=f&&f<=9;
条件式を書いただけでは何も起きません。
これは条件を計算しているだけで、何処にも代入してませんしifやwhileなど条件分岐・ループをなどを使っていないからです。

最後に
printf("%d",c+d+e+f);
はもっと意味不明です。

でも、[1000 桁以下の整数です。]って問題は、実は1000の位だと思っているのが勘違いかもしれないと私は疑っています。

[補足] 同じ様な問題を見たことがあって、それは本当に1000桁でした。1000の位じゃないですよ。たぶん、AOJの問題
[補足の補足] もしAOJの問題なら、まだ早すぎますとしか言えません。
「課題一覧 - アナステイシア」 ここの問題解けますか?
http://anastasia.dip.jp/index.php?url=t ... =kadailist
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ただの屍のようだ

Re: 各桁の和

#8

投稿記事 by ただの屍のようだ » 7年前

辛口コメントばかりで他人である自分もつい涙目になりそうで・・・なりません。
自分はやさしさに満ちていると自負してるのでヒント出します。
各桁を文字として読み込みます。
文字を数字に変えてから足し算します。
これなら1000桁だろうとint変数一つで足ります。(一桁0~9なので範囲は0~9000です)
long変数使えば1億桁もいけます。

box
記事: 1746
登録日時: 9年前

Re: 各桁の和

#9

投稿記事 by box » 7年前

千の位までなのか1000桁なのかはさておき、
例えば2345という4桁の1個の数値を与えたとき、
その各桁の合計値である14(=2+3+4+5)を
手で計算するとしたら、質問者さんはどういう処理をしますか?
何かの数値を10で割る、という処理はあるかもしれませんが、
10倍したり100倍したり1000倍したり、ということは
おそらくしなくてすむ(ていうか、してはいけない)と思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

こうき

Re: 各桁の和

#10

投稿記事 by こうき » 7年前

沢山の回答ありがとうございます。

まずはsoftya(ソフト屋) さんが教えてくれたサイトで練習してみようと思います。

一通り終わったらまた挑戦してみようとおもいます。

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る