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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

Q&A

解決済

3回答

1811閲覧

大きな桁を配列に4桁ずついれる

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2020/11/12 12:56

編集2020/11/13 00:30

20桁の数 19994444777722229999
この数は1つの変数には入らないので、下から4桁ずつ区切って次のように配列a[]に格納する。

a[0]に1999、a[1]に4444、a[2]に7777、a[3]に2222、a[4]に9999を入れるみたいに、scanfを使って、行いたいです。

0~20桁で入れたいです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/11/12 13:25 編集

学校の課題なら、自分でやらないとためにならないですよ。 https://teratail.com/cautions_question > コードをください・デバッグしてください等の丸投げの質問 > 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 > 問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。 > まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。
dodox86

2020/11/13 00:38

[2020/11/13 09:30]に編集された質問文を読んで: 既にいくつも回答をいただいていますが、分からない、納得できないということでしょうか。 そうであれば回答の何が分からないのかちゃんと説明しましょう。希望だけ書いても質問を読んだ人には通じません。
guest

回答3

0

ベストアンサー

20桁の数というのは 10000000000000000000~99999999999999999999 のことですか?
それとも 20桁までの数 0~99999999999999999999 ということですか?
その場合、16桁未満の数でも配列 a の要素数は 5 でいいんですか?
16桁の場合は、a[0] には 0 が入り、a[1]には兆の位の数、a[2]には億の位の数
というように入れるんですか?

10000000000000000000~99999999999999999999 の場合、次のように書けます。

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int a[5]; 6 if (scanf("%4d%4d%4d%4d%4d", a, a+1, a+2, a+3, a+4) != 5) return 1; 7 printf("%d%04d%04d%04d%04d\n", a[0], a[1], a[2], a[3], a[4]); 8}

上記の疑問を解消するように質問を編集してください。
そうすれば、回答に追記をします。

追記

0~20桁で入れたいです。

0桁の数とはどういうものですか?

C

1#include <stdio.h> // printf, scanf, sprintf, sscanf, puts, putchar 2#include <string.h> // strlen, strcpy, memset 3 4int toArray(int a[], const char *s) 5{ 6 char buf[20 + 1], c; 7 int len = strlen(s); 8 if (len > 20) s += len - 20, len = 20; 9 memset(buf, '0', 20 - len); 10 strcpy(buf + 20 - len, s); 11 return sscanf(buf, "%4d%4d%4d%4d%4d%c", a, a+1, a+2, a+3, a+4, &c) != 5; 12} 13 14void toStr(const int a[], char *s) 15{ 16 int i = 0; 17 while (i < 4 && a[i] == 0) i++; 18 s += sprintf(s, "%d", a[i++]); 19 while (i < 5) s += sprintf(s, "%04d", a[i++]); 20} 21 22int main(void) 23{ 24 int a[5]; char buf[100]; 25 26 while (printf(">> "), scanf("%99s", buf) == 1 && buf[0] != '.') { 27 if (toArray(a, buf)) 28 puts(" Error"); 29 else { 30 for (int i = 0; i < 5; i++) printf(" %04d", a[i]); 31 putchar('\n'); 32 toStr(a, buf); 33 printf(" %s\n", buf); 34 } 35 } 36}

20桁を超える場合、下位20桁を配列に入れます。
エラーにしたいなら変更が必要です。
負の数は入力されないと仮定して、チェックしていません。
数字以外の文字があるとエラーになります。

コードだけ見せられても分からないところがたくさんあると思いますが、
自分で調べて、分からないところはコメントで質問してください。

投稿2020/11/12 15:06

編集2020/11/13 02:08
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

scanfを使うのは適切と思えません。文字列として入力することが必要です。

投稿2020/11/12 13:00

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

10000の余りを出して配列に代入、そして、10000割る、を4回繰り返せばいいです

ってよく考えたら文字列のはなしなのね。
そしたら単純に、文字を4つづつ切り出して(必要なら整数変換)いけばそんでいいはなしになるけど。

どっちでしょうか

投稿2020/11/12 12:59

編集2020/11/12 13:01
y_waiwai

総合スコア87778

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HogeAnimalLover

2020/11/12 13:25

その計算は事前に整数型変数に代入できなければ実行できないですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問