Numeral System
こんな泥臭いソースでも,ちゃんとした答えが出ればよいのです.
#include <stdio.h> int main(void) { puts("MCXI"); // ファイル出力準備 FILE *pfI; // 入力ファイルポインタ FILE *pfO; // 出力ファイルポインタ pfI = fopen("c.in", "r"); if(pfI == NULL) { printf("ERR: input file open\n"); return -1; } pfO = fopen("c.out","w"); if(pfO == NULL) { printf("ERR: output file open\n"); fclose(pfI); return -2; } // // 入力 // int n; // 計算指示の数 char s1[9], s2[9]; fscanf(pfI, "%d", &n); for(int i = 0; i < n; i++) { fscanf(pfI, "%s%s", s1, s2); printf("%d: %s %s\n", i, s1, s2); // // 処理 // int *m1, *m2; // 式 mcxi int *m; m1 = new int [4]; m2 = new int [4]; m = new int [4]; for(int j = 0; j < 4; j++) { m[j] = m1[j] = m2[j] = 0; } // 値の代入 // s1 for(int j = 0; s1[j] != 0;) { // 数字がある if('2' <= s1[j] && s1[j] <= '9') { switch(s1[j+1]) { case 'm': m1[0] =+ s1[j] - '0'; break; case 'c': m1[1] =+ s1[j] - '0'; break; case 'x': m1[2] =+ s1[j] - '0'; break; case 'i': m1[3] =+ s1[j] - '0'; break; } j += 2; } else // 文字だけ { switch(s1[j]) { case 'm': m1[0] =+ 1; break; case 'c': m1[1] =+ 1; break; case 'x': m1[2] =+ 1; break; case 'i': m1[3] =+ 1; break; } j += 1; } } printf("%d %d %d %d\n", m1[0], m1[1], m1[2], m1[3]); // s2 for(int j = 0; s2[j] != 0;) { // 数字がある if('2' <= s2[j] && s2[j] <= '9') { switch(s2[j+1]) { case 'm': m2[0] =+ s2[j] - '0'; break; case 'c': m2[1] =+ s2[j] - '0'; break; case 'x': m2[2] =+ s2[j] - '0'; break; case 'i': m2[3] =+ s2[j] - '0'; break; } j += 2; } else // 文字だけ { switch(s2[j]) { case 'm': m2[0] =+ 1; break; case 'c': m2[1] =+ 1; break; case 'x': m2[2] =+ 1; break; case 'i': m2[3] =+ 1; break; } j += 1; } } printf("%d %d %d %d\n", m2[0], m2[1], m2[2], m2[3]); // 足し算 // 繰上げをあとにやる for(int j = 0; j < 4; j++) { m[j] = m1[j] + m2[j]; } for(int j = 3; j >= 0; j--) { if(m[j] >= 10) { m[j-1] += 1; m[j] -= 10; } } printf("%d %d %d %d\n", m[0], m[1], m[2], m[3]); // // 出力 // if(m[0] != 0) { if(m[0] > 1) fprintf(pfO, "%dm", m[0]); else fprintf(pfO, "m"); } if(m[1] != 0) { if(m[1] > 1) fprintf(pfO, "%dc", m[1]); else fprintf(pfO, "c"); } if(m[2] != 0) { if(m[2] > 1) fprintf(pfO, "%dx", m[2]); else fprintf(pfO, "x"); } if(m[3] != 0) { if(m[3] > 1) fprintf(pfO, "%di", m[3]); else fprintf(pfO, "i"); } fprintf(pfO, "\n"); delete [] m; delete [] m1; delete [] m2; } // ファイル出力 //fprintf(pfO, "Hello World!! - out\n"); //ファイルポインタを閉じる fclose(pfI); fclose(pfO); return 0; }