C言語でわからない問題があります。

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

C言語でわからない問題があります。

#1

投稿記事 by コンペ » 12年前

始めたばかりでよくわからないんですけど、
最初にnの値を入力して、各入力を行った後、目的を実行する以下のプログラムを作成しなさい。ただし、nの大きさは100を超えないものとする。n枚の伝票の金額を入力した後、その合計を求めるプログラムにおいて一次元配列を引数で渡すと各計算をして結果を返してくれる関数を作り、この関数を使って、その計算を表示するプログラムを作りなさい。という問題です。よろしくお願いします。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: C言語でわからない問題があります。

#2

投稿記事 by bitter_fox » 12年前

コンペ さんが書きました:始めたばかりでよくわからないんですけど、
最初にnの値を入力して、各入力を行った後、目的を実行する以下のプログラムを作成しなさい。ただし、nの大きさは100を超えないものとする。n枚の伝票の金額を入力した後、その合計を求めるプログラムにおいて一次元配列を引数で渡すと各計算をして結果を返してくれる関数を作り、この関数を使って、その計算を表示するプログラムを作りなさい。という問題です。よろしくお願いします。
このフォーラムでは課題の丸投げは禁じられています。
フォーラムルール さんが書きました:
課題の丸投げ(問題文だけ書く事)は禁止です。

ただし上のように記載してもらえればこれは当てはまりません。

自分でどこまでやったのか、今どこが解らないのかを明確にして下さい。

さっぱり解らず、手も足も出ない時は、その事を明記の上、

勉強方法からアドバイスを受けましょう。

どうしても提出期限の関係で答えが欲しい時はその事をしっかり明記の上、

回答者さん達の理解を求めるようにしましょう。

また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。

同じ事で困っている人の為に過去ログに有用な情報を残すようお願いします。
まず、コンペさんがどこまで書けたか、またどこから分からないのかを明示してくださいますか?
例えば、nは読み込めるけどそれ以降の伝票の金額の入力の受け取り方が分からないなどです。

フォーラムルールにあるテンプレートを使っていただいても構いません。
詳しくはフォーラムルールをお読みください。
ソースコード投稿時はインデントをしっかりと行ったうえcodeタグで囲ってください。これについてもフォーラムルールに書かれているので確認してください。

アバター
へろりくしょん
記事: 92
登録日時: 13年前
住所: 福岡

Re: C言語でわからない問題があります。

#3

投稿記事 by へろりくしょん » 12年前

暇だったのでざっくり書いてみました。

まともに書くとちょっと長くなるのでだいぶ手抜きです。 おかげでちょっと汚いです。
金額の上限が分からなかったのでとりあえず1024桁まで対応してみました。
10兆円でも高々13桁なので、1024桁もあれば金額としては十分だという判断です。
これだけあれば、地球丸ごと買えます。 多分。

関数に1次元配列を渡します。 関数は結果を返します。 条件は満たしていると思います。

コード:

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

#define BSIZE		1024

char* sum(char *base, char *add)
{
	int i, j, len = strlen(add);

	for(i = 0; i < len; i++){
		int tmp = (base[i] ? base[i] - '0' : 0) + add[len - i - 1] - '0';
		base[i] = tmp % 10 + '0';
		for(j = i + 1; tmp /= 10; j++){
			tmp = base[j] + 1 - (base[j] ? '0' : 0);
			base[j] = tmp % 10 + '0';
		}
	}

	return base;
}

int main(void)
{
	int i, n;
	char *ans, buf1[BSIZE] = "", buf2[BSIZE];

	scanf("%d", &n);

	//n回入力して計算
	for(i = 0; i < n; i++){
		scanf("%s", buf2);
		ans = sum(buf1, buf2);
	}

	//結果の出力
	ans += strlen(ans) - 1;
	while(ans >= buf1){
		printf("%c", *ans--);
	}
	printf("%s", "\n");

	return 0;
}

閉鎖

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