난
$ time ./a.out
\'2846259680917054518906413212119868890148051401702799230794179994274411340003764443772990786757784775815884062142317
52883004233994015351873905242116138271617481982419982759241828925978789812425312059465996259867065601615720360323979
263287367170557419759620...........................
real 1m5.390s
user 1m5.184s
sys 0m0.168s
이렇게 나왔다..
자 .. 니들은???
아래 소스 컴파일
-------------------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_BUFF_SIZE 50000000
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);
char *A;
char *B;
char *C;
char *D;
char *E;
char *F;
char *G;
char *H;
char *I;
char *J;
char *K;
char *L;
char *M;
char *N;
main()
{
char *a;
char *b;
char c;
char *result;
int i;
a = (char *)malloc(MAX_BUFF_SIZE);
b = (char *)malloc(MAX_BUFF_SIZE);
result = (char *)malloc(MAX_BUFF_SIZE);
A = (char *)malloc(MAX_BUFF_SIZE);
B = (char *)malloc(MAX_BUFF_SIZE);
C = (char *)malloc(MAX_BUFF_SIZE);
D = (char *)malloc(MAX_BUFF_SIZE);
E = (char *)malloc(MAX_BUFF_SIZE);
F = (char *)malloc(MAX_BUFF_SIZE);
G = (char *)malloc(MAX_BUFF_SIZE);
H = (char *)malloc(MAX_BUFF_SIZE);
I = (char *)malloc(MAX_BUFF_SIZE);
J = (char *)malloc(MAX_BUFF_SIZE);
K = (char *)malloc(MAX_BUFF_SIZE);
L = (char *)malloc(MAX_BUFF_SIZE);
M = (char *)malloc(MAX_BUFF_SIZE);
N = (char *)malloc(MAX_BUFF_SIZE);
cont:
for(i=0;i<MAX_BUFF_SIZE;i++){
a[i] = b[i] = result[i] = \'\\0\';
}
strcpy(a, "10000");
c = \'!\';
goto rntjr;
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;
}
}
rntjr:
// 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;
temp = A;
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;
char *bb;
aa = B;
bb = C;
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;
char *aa;
char *bb;
char *p, *q;
aa = D;
bb = E;
temp = F;
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;
char *bb;
char *cc;
char *temp;
char *temp1;
aa = G;
bb = H;
cc = I;
temp = J;
temp1 = K;
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;
char *bb;
char *rst;
aa = L;
bb = M;
rst = N;
strcpy(aa, a);
strcpy(rst, a);
do{
bbegi(aa, "1", bb);
/* printf("%s\\n", 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);
}
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.