ページ 11

各桁の和

Posted: 2013年4月30日(火) 23:16
by こうき
問題:与えられた数の各桁の和を計算するプログラムを作成して下さい。複数のデータセットが入力として与えられます。各データセットは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;
}
しかし、これではエラーが出てしまい、うまく動作しませんでした。
数学的に考えると、合っていると思うのですが、これをプログラムにするとうまく動作しませんでした。


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

よろしくお願いします。

Re: 各桁の和

Posted: 2013年4月30日(火) 23:26
by h2so5
まずC言語の基礎的な文法を勉強されたほうが良いと思います。
これでは単なる条件の羅列にしかなっていないため、プログラムとは呼べません。

Re: 各桁の和

Posted: 2013年4月30日(火) 23:30
by こうき
ご回答ありがとうございます。

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

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

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

Re: 各桁の和

Posted: 2013年4月30日(火) 23:38
by ISLe
コードを書く前に確認しなければいけないことがあります。

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

Re: 各桁の和

Posted: 2013年4月30日(火) 23:38
by nil
6~9行目です。
10行目は文法的に全く正しくありません。
なので文法を勉強したほうが良いとh2so5さんは仰ったのです。

Re: 各桁の和

Posted: 2013年4月30日(火) 23:53
by こうき
ご回答ありがとうございます。

ISLe さん

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

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

涼雅 さん

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

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

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

よろしくお願いします。

Re: 各桁の和

Posted: 2013年5月01日(水) 00:04
by softya(ソフト屋)
数学的には正しくても、数学言語ではない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

Re: 各桁の和

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

Re: 各桁の和

Posted: 2013年5月01日(水) 06:17
by box
千の位までなのか1000桁なのかはさておき、
例えば2345という4桁の1個の数値を与えたとき、
その各桁の合計値である14(=2+3+4+5)を
手で計算するとしたら、質問者さんはどういう処理をしますか?
何かの数値を10で割る、という処理はあるかもしれませんが、
10倍したり100倍したり1000倍したり、ということは
おそらくしなくてすむ(ていうか、してはいけない)と思います。

Re: 各桁の和

Posted: 2013年5月01日(水) 07:55
by こうき
沢山の回答ありがとうございます。

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

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

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