質問<1021>2002/12/2
教えて下さい。
問1
次のプログラムは何をするものか説明せよ。
program test (input,output);
var i,j,n,s:integer;
begin
read(n);
s:=0;
i:=1;
j:=1;
while 1<=n do
begin
s:=s+j
i:=i+1
j:=j^*(-1)
end;
writeln('n=',n:3,'のときs=',s:5)
end.
問2
20桁の2つの正整数を与えると、加減乗算して印刷するプログラムをつくれ。
ただし、1つの20桁の正整数は配列に格納されるとする。
お願い致します。
※すいません。先ほどのプログラムの問題はbasicで書けと言う事です。
お便り2002/12/7
from=Tetsuya Kobayashi
(1) シンタックスエラー。何もしません。 (2) 恐ろしく汚いですが、動きます。 #includeint main(int argc, char *argv[]) { int a[20], b[20], p[21], q1[21], q2[21], r[40], i, j; for (i=0; i<20; i++) { a[19-i]=argv[1][i]-48; b[19-i]=argv[2][i]-48; } printf("a = "); for (i=19; i>=0; i--) printf("%d", a[i]); printf("\nb = "); for (i=19; i>=0; i--) printf("%d", b[i]); for (i=0; i<=20; i++) { p[i]=0; q1[i]=0; q2[i]=0; } for (i=0; i<40; i++) r[i]=0; for (i=0; i<20; i++) { p[i]+=a[i]+b[i]; if (p[i]>=10) { p[i]-=10; p[i+1]++; } q1[i]+=a[i]-b[i]; if (q1[i]<0) { q1[i]+=10; q1[i+1]--; } q2[i]+=b[i]-a[i]; if (q2[i]<0) { q2[i]+=10; q2[i+1]--; } } printf("\na+b = "); for (i=20; i>=0; i--) printf("%d", p[i]); printf("\na-b = "); if (q1[20]==0) { for (i=19; i>=0; i--) printf("%d", q1[i]); } else { printf("-"); for (i=19; i>=0; i--) printf("%d", q2[i]); } for (i=0; i<20; i++) { for (j=0; j<20; j++) { r[i+j]+=a[i]*b[j]; } } for (i=0; i<39; i++) { r[i+1]+=r[i]/10; r[i]=r[i]%10; } printf("\na*b = "); for (i=39; i>=0; i--) printf("%d", r[i]); printf("\n"); } コンパイルして ./a (20桁) (20桁) と叩いてみてください。ちゃんと計算してくれます。
お便り2003/1/21
from=phaos
数学の質問<1085>に問1の解答が載っています。