#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_BUFF_SIZE 930000
void deohagi(char *, char *, char *);
void bbegi(char *, char *, char *);
void gobhagi(char *, char *, char *);
void nanugi(char *, char *, char *);
void fac(char *, char *);
void outfile(char *, char *, char *, char);
main()
{
char a[MAX_BUFF_SIZE];
char b[MAX_BUFF_SIZE];
char c;
char result[MAX_BUFF_SIZE];
int i;
cont:
for(i=0;i<MAX_BUFF_SIZE;i++){
a[i] = b[i] = result[i] = \'\\0\';
}
printf(\"input number a->\");
gets(a);
if(strlen(a) > MAX_BUFF_SIZE){
printf(\"input error 첨부터 다시..\\n\");
goto cont;
}
printf(\"연산방식 입력( + - * / ! )-> \");
gets(result);
c = result[0];
strcpy(result, \"0\");
if(c != \'+\' && c != \'-\' && c != \'*\' && c != \'/\' && c != \'!\'){
printf(\"input error 첨부터 다시..\\n\");
goto cont;
}
if(c != \'!\'){
printf(\"input number b->\");
gets(b);
if(strlen(b) > MAX_BUFF_SIZE){
printf(\"input error 첨부터 다시..\\n\");
goto cont;
}
}
// printf(\"값을 입력해라.. ex)1000 + 1000) 연산은 + - * / !\\n\");
// scanf(\"%s %c %s\", a, &c, b);
// getchar(); // 마지막 엔터 읽어서 없에기..
if(c != \'+\' && c != \'-\' && c != \'*\' && c != \'/\' && c != \'!\'){
printf(\"input error 연산자, 첨부터 다시..\\n\");
goto cont;
}
if(strlen(a) > MAX_BUFF_SIZE){
printf(\"input error A수 , 첨부터 다시..\\n\");
goto cont;
}
if(strlen(b) > MAX_BUFF_SIZE){
printf(\"input error 뒷수, 첨부터 다시..\\n\");
goto cont;
}
if(c == \'+\'){
deohagi(a, b, result);
printf(\"\'%s\'\\n\",result);
// outfile(a, b, result, c);
}else if(c == \'-\'){
bbegi(a, b, result);
printf(\"\'%s\'\\n\",result);
// outfile(a, b, result, c);
}else if(c == \'*\'){
gobhagi(a, b, result);
printf(\"\'%s\'\\n\",result);
// outfile(a, b, result, c);
}else if(c == \'/\'){
nanugi(a, b, result);
printf(\"\'%s\'\\n\",result);
// outfile(a, b, result, c);
}else if(c == \'!\'){
fac(a, result);
printf(\"\'%s\'\\n\",result);
outfile(a, \"\", result, c);
}
KIN:
printf(\" \\n\");
exit(0);
gets(result);
c = result[0];
if(c == \'2\'){
exit(0);
}else if(c == \'1\'){
goto cont;
}else{
printf(\"똑바로 입력해라\\n\");
goto KIN;
}
}
// 0: 48, 9:57
void deohagi(char *a, char *b, char *result)
{
int i;
int lenA, lenB, lenC;
int smallRst, smallPa;
char temp[MAX_BUFF_SIZE];
smallRst = smallPa = 0;
lenA = strlen(a)-1;
lenB = strlen(b)-1;
lenC = 0;
for(i=0;i<MAX_BUFF_SIZE;i++, lenA--, lenB--){
if(lenA > -1 && lenB > -1){
smallRst = (a[lenA] - 48) + (b[lenB] - 48) + smallPa;
smallPa = smallRst>=10 ? 1 : 0 ;
smallRst = smallRst % 10;
temp[i] = smallRst + 48;
}else{
if(lenA > -1){
smallRst = (a[lenA] - 48) + smallPa;
smallPa = smallRst>=10 ? 1 : 0 ;
smallRst = smallRst % 10;
temp[i] = smallRst + 48;
}else if(lenB > -1){
smallRst = (b[lenB] - 48) + smallPa;
smallPa = smallRst>=10 ? 1 : 0 ;
smallRst = smallRst % 10;
temp[i] = smallRst + 48;
}else{
temp[i] = smallPa + 48;
temp[i+1] = \'\\0\';
break;
}
}// if(lenA > -1 && lenB > -1){
}
if(smallPa)
i++;
for(lenC=0;i>=0;i--,lenC++){
result[lenC-1] = temp[i];
}
result[lenC] = \'\\0\';
}
void gobhagi(char *a, char *b, char *result)
{
int i,j;
int lenB;
char aa[MAX_BUFF_SIZE];
char bb[MAX_BUFF_SIZE];
strcpy(aa, \"0\");
strcpy(bb, a);
lenB = strlen(b) -1;
for(i=0;lenB > -1;i++, lenB--){
j = b[lenB] - 48;
for(;j>0;j--){ /* */
deohagi(aa, bb, result);
strcpy(aa, result);
}
strcat(bb,\"0\");
}
}
void bbegi(char *a, char *b, char *result)
{
int i;
int lenA, lenB, lenC;
int smallRst, smallPa;
int isMinus=0;
char temp[MAX_BUFF_SIZE];
char aa[MAX_BUFF_SIZE], bb[MAX_BUFF_SIZE];
char *p, *q;
smallRst = smallPa = 0;
lenA = strlen(a)-1;
lenB = strlen(b)-1;
lenC = 0;
strcpy(aa, a);
strcpy(bb, b);
if(lenA < lenB){
isMinus = 1;
}else if(lenA == lenB){
if(a[0] < b[0]){
isMinus = 1;
}
}
min:
if(isMinus){
strcpy(temp, aa);
strcpy(aa, bb);
strcpy(bb, temp);
lenA = strlen(aa)-1;
lenB = strlen(bb)-1;
}
for(i=0;i<MAX_BUFF_SIZE;i++, lenA--, lenB--){
if(lenA > -1 && lenB > -1){
smallRst = (aa[lenA] - 48) - (bb[lenB] - 48) - smallPa;
smallPa = 0;
if(smallRst < 0){
smallRst += 10;
smallPa = 1;
}
temp[i] = smallRst + 48;
}else{
if(lenA > -1){
smallRst = (aa[lenA] - 48) - smallPa;
smallPa = 0;
if(smallRst < 0){
smallRst += 10;
smallPa = 1;
}
smallRst = smallRst % 10;
temp[i] = smallRst + 48;
}else if(lenB > -1){
smallRst = (bb[lenB] - 48) - smallPa;
smallPa = 0;
if(smallRst < 0){
smallRst += 10;
smallPa = 1;
}
smallRst = smallRst % 10;
temp[i] = smallRst + 48;
}else{
if(smallPa){
smallPa = 0;
isMinus = 1;
goto min;
}
// temp[i] = smallPa + 48 ;
temp[i] = \'\\0\';
break;
}
}// if(lenA > -1 && lenB > -1){
}
lenC=0;
if(isMinus){
result[0] = \'-\';
lenC += 2;
i--;
}
for(;i>=0;i--){
result[lenC-1] = temp[i];
lenC++;
}
result[lenC] = \'\\0\';
q = p = result;
while(*p){
if(*p == \'-\'){
p++;
q++;
}else if(*p == \'0\'){
p++;
}else{
strcpy(q, p);
break;
}
}
}
void nanugi(char *a, char *b, char *result)
{
char aa[MAX_BUFF_SIZE];
char bb[MAX_BUFF_SIZE];
char cc[MAX_BUFF_SIZE];
char temp[MAX_BUFF_SIZE];
char temp1[MAX_BUFF_SIZE];
strcpy(aa, a);
strcpy(bb, b);
strcpy(cc, \"0\");
while(1){
memset(temp1, 0, MAX_BUFF_SIZE);
memset(temp, 0, MAX_BUFF_SIZE);
bbegi(aa, bb, temp);
if(temp[0] != \'-\' ){
if(temp[0] == \'0\'){
deohagi(cc, \"1\", temp1);
break;
}
strcpy(aa, temp);
deohagi(cc, \"1\", temp1);
strcpy(cc, temp1);
}else{
break;
}
}
strcpy(result, temp[0] != \'-\' ? temp1 : cc);
if(temp1[0] != \'0\' || temp1[0] != \'-\'){
strcat(result, \" 나머지 \");
strcat(result, temp[0] == \'-\' ? aa : temp);
}
}
void fac(char *a, char *result)
{
char aa[MAX_BUFF_SIZE];
char bb[MAX_BUFF_SIZE];
char rst[MAX_BUFF_SIZE];
strcpy(aa, a);
strcpy(rst, a);
do{
bbegi(aa, \"1\", bb);
strcpy(aa,bb);
gobhagi(rst, bb, result);
strcpy(rst, result);
}while(strcmp(bb, \"2\"));
}
void outfile(char *a, char *b, char *c, char d)
{
FILE *fp;
fp = fopen(\"infile.dat\", \"w\");
fprintf(fp,\"%s %c %s\", a, d, b);
fclose(fp);
fp = fopen(\"outfile.dat\", \"w\");
fprintf(fp,\"%s\", c);
fclose(fp);
}
댓글 0