/************************** *多桁乗算プログラム *制作者:横田敏明 *作成日:2003.8.27 *使い方:"input!"と表示されたら二数を入力します。 *プログラム概要:配列と繰り上げを用いたため、多桁の乗算が可能です。 **************************/ #include int main() { int count, temp, checker=0, un[100], deux[100], ans[200]; int inputedun, inputeddeux, count2; int hant, unhant=1, deuxhant=1, anstemp[400]; printf("input!\n"); scanf("%d %d", &inputedun, &inputeddeux); for (count=0; inputedun > 0; ++count){ if (inputedun >= 10){ un[count] = inputedun % 10; inputedun = inputedun / 10; ++unhant; /*エラーチェック開始 printf("check one...%d\n", un[count]); printf("the ...%d the ...%d\n", inputedun,unhant); チェック終了*/ } else { un[count] = inputedun; inputedun = 0; /*エラーチェック開始 printf("check end's...%d count...%d\n", un[count], count); printf("the ...%d\n", inputedun); printf("un[count].count=1~\n"); for (count=0; count < unhant; ++count) printf("%d", un[count]); printf("\ntestiv argment...\n"); for (count=unhant-1; count >= 0; --count) printf("%d", un[count]); printf("\nchek end...\n"); チェック終了*/ } } for (count=0; inputeddeux > 0; ++count){ if (inputeddeux >= 10){ deux[count] = inputeddeux % 10; inputeddeux = inputeddeux / 10; ++deuxhant; /*エラーチェック開始 printf("check deux[%d]=%d\n",count,deux[count]); printf("the inputdeux...%d\n", inputeddeux); チェック終了*/ } else { deux[count] = inputeddeux; inputeddeux = 0; /*エラーチェック開始 printf("deux[%d](last)=%d\n",count, deux[count]); printf("deux[]="); for (count=0; count < deuxhant; ++count){ printf("%d",deux[count]); } printf("\n"); チェック終了*/ } } for (count=deuxhant-1; count >= 0; --count){ for (count2=unhant-1; count2 >= 0; --count2){ /*自分でいうのもなんだが↓この部分、天才的と思わんか!?*/ anstemp[(unhant)*(deuxhant) -(unhant*(deuxhant-count-1)+(unhant-count2-1)+1)] = un[count2] * deux[count]; /*自分でいうのもなんだが↑この部分、天才的と思わんか!?*/ /*誰か、この部分のすごさを理解してくれ*/ } } /*エラーチェック開始 printf("check start...\n"); for (count=0; count < (unhant * deuxhant); ++count) printf("anstemp[%d]=%d\n", count, anstemp[count]); printf("check end...\n"); チェック終了*/ for (count=((unhant * deuxhant) - 1); count >= 0; --count){ ans[(count % unhant) + (count / unhant)] = ans[(count % unhant) + (count / unhant)] + anstemp[count]; if ( ans[(count % unhant) + (count / unhant)] >= 10){ ans[(count % unhant) + (count / unhant) +1] = ans[(count % unhant) + (count / unhant) +1] + (ans[(count % unhant) + (count / unhant)] / 10); ans[(count % unhant) + (count / unhant)] = ans[(count % unhant) + (count / unhant)] % 10; } } /*↓繰り上げを繰り返して、確実性を高めます*/ for (count=0; count < (unhant * deuxhant + 10); ++count){ if ( ans[(count % unhant) + (count / unhant)] >= 10){ ans[(count % unhant) + (count / unhant) +1] = ans[(count % unhant) + (count / unhant) +1] + (ans[(count % unhant) + (count / unhant)] / 10); ans[(count % unhant) + (count / unhant)] = ans[(count % unhant) + (count / unhant)] % 10; } } for (count=(unhant + deuxhant -1); count >=0; --count) printf("%d", ans[count]); printf("\n"); }