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桁を配列に入れます。
エラーにしたいなら変更が必要です。
負の数は入力されないと仮定して、チェックしていません。
数字以外の文字があるとエラーになります。
コードだけ見せられても分からないところがたくさんあると思いますが、
自分で調べて、分からないところはコメントで質問してください。