質問<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の解答が載っています。