ページ 1 / 1
各桁の和
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(ソフト屋) さんが教えてくれたサイトで練習してみようと思います。
一通り終わったらまた挑戦してみようとおもいます。
ありがとうございました。