TomiXRM / Russian-Peasant-Calculation

情報処理演習で出たプログラミング練習課題

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ロシア農民計算

情報処理演習で出たプログラミング練習課題

/*---------------------------------------------------
    
    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;
}

About

情報処理演習で出たプログラミング練習課題

License:MIT License


Languages

Language:C 100.0%