情報処理演習で出たプログラミング練習課題
/*---------------------------------------------------
Written by TomiXRM
ロシア農民計算
Please input two values like this
566 877
---------------------------------------------------*/
#include <stdio.h>
#define BUFF 32
int A = 13;
int B = 237;
int i = 0;
int oddCount = 0;
int datumA[BUFF];//Aの割っていくデータを入れる配列
int datumB[BUFF];//Aのかけていくデータを入れる配列
char isOddNumber[BUFF];//奇数だった時の配列番号を記憶する変数
int answer = 0;//掛け算の答え
int main (){
// -------入力処理-------
do {//計算短縮のための変数入れ替え処理(Aが小さい数になる)
printf("Please input two numbers(InputEX:18 136)>\r\n");
scanf("%d%d",&A,&B);//受け取り
printf("\r\nYou entered A:%d B:%d\r\n",A,B);
if(A < 0 || B < 0) {//追加課題.負の入力で再入力を求める
printf("please enter the number isn't negative value!!!\r\n");
}else{
if(A > B){//追加課題
int tmp = A;
A = B;
B = tmp;
printf("values were swapped!!!\r\n");//追加課題
}
}
} while(A < 0 || B < 0);
//-------ロシア農民計算-------
datumA[0] = A;
datumB[0] = B;
printf(" ----------------\r\n");
while (i <= BUFF-1) {
i++;
datumA[i] = datumA[i-1] / 2;
datumB[i] = datumB[i-1] * 2;
if (datumA[i] % 2 == 1) {
printf("*");
isOddNumber[oddCount] = i;//奇数だった時の配列番号記憶
oddCount++;//奇数の出た数インクリメント
}else{
printf(" ");
}
printf(" - A:%d B:%d\r\n",datumA[i],datumB[i]);
if (datumA[i] == 1) break;//割って1が出た時の処理
}
if(i == BUFF - 1){//配列の数を超えた時にエラーを出す
printf("Error:Buffer overflow!!! Set BUFF value more lager\r\n");
return -1;
}
for (int n = 0; n < oddCount; n++){//奇数を足す
answer += datumB[isOddNumber[n]];
}
printf(" ----------------\r\n");
printf("answer: %d*%d=%d",A,B,answer);
return 0;
}