C
1コー 2/*n1=123 n2=123 list1とlist2は下の桁からlist1[0]=3,list1[1]=2,list1[2]=1です。 3 4list2も同じです。のこりは0で埋めています。listnewもすべて0で埋めています。*/ 5 6 7void multiply(int n1,int n2,int *list1,int *list2,int *listnew){ 8 int carry=0; 9 int digit1=0,digit2=0,i=0,max,j=0,t,dit; 10 while(n1!=0){ 11 n1=n1/10; 12 digit1++;} 13 while(n2!=0){ 14 n2=n2/10; 15 digit2++;} 16 if (digit1>digit2) 17 max=digit1; 18 else 19 max=digit2; 20 if (max==digit2){ 21 for (;digit1>0;digit1--){ 22 carry=0; 23 for (i=0;i<max;i++){ 24 25 if (list1[j]*list2[i]+listnew[i+j]<10 && carry==0){ 26 listnew[i+j]=(list1[j]*list2[i]+listnew[i+j])%10; 27 } 28 else if (list1[j]*list2[i]+carry+listnew[j+i]<10 && carry!=0){ 29 listnew[i+j]=(list1[j]*list2[i]+carry+listnew[i+j])%10; 30 carry=0;} 31 else if (list1[j]*list2[i]+carry+listnew[i+j]>9 && carry!=0){ 32 listnew[i+j]=(list1[j]*list2[i]+carry+listnew[i+j])%10; 33 carry=(list1[j]*list2[i]+carry+listnew[i+j])/10; 34 } 35 else 36 {listnew[i+j]=(list1[j]*list2[i]+listnew[i+j])%10; 37 carry=(list1[j]*list2[i]+listnew[i+j])/10; 38 }} 39 if (carry!=0){ 40 listnew[i+1+j]=carry;} 41 42 j++;}}}
二つの配列の掛け算です。
digit1は二つあるうちの小さい方の数字の桁です。今回はlist1のほうが小さいです。
maxは大きい方の桁です。
list1とlist2ではすでにintの整数が代入されています。
listnewに掛け算した結果を代入したいです。
123×11ではあうのですが、123×123とすると14029となるずれます。
どこがおかしいのでしょうか。
全く違うかったらそうおっしゃてください。
ヒントだけでもどうかください。
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー