/*
*********************************************
목표
: 2의 지수승 더하기
(문자열을
이용한 산술 연산 )
원리 : ASCll 코드값을 이용한
연산
기본적인
같은 두 수의
덧셈이므로
'5'
이상일 경우는 1을 올림해줘서
처리
*********************************************
*/
#include < stdio.h >
#include < string.h
>
#include < stdlib.h >
char *GetResult(int ilimit); //실질적인 연산을 하는 함수
void
mystrcpy(char *to, char *from); //구한 값을 역으로 저장하는 함수
int main(void){
char *chp_result; //결과를 받는
변수
//결과 받음
chp_result =
GetResult(100);
printf("100시간일때 개체수:
\n");
puts(chp_result);
chp_result =
GetResult(250);
printf("250시간일때 개체수:
\n");
puts(chp_result);
return 0;
}
char *GetResult(int ilimit){
char *chp_result; //리턴하는 결과값
char *chp_tmp;
//중간에 값이 저장되는 임시공간
int iroof=0; //횟수를 카운트하는 변수
int
icalculate=0; //문자열의 연산을 제어하는 변수
char *walker; //문자열내에서 이동하는
포인터
char Upvalue = 0; //올림수
chp_result = (char*)malloc(100);
chp_result[0] =
'1'; //원시 생물 1을 저장
chp_result[1] = '\0'; //문자열형식을 맞추기위해
NULL저장
chp_tmp =
(char*)malloc(100);
if(ilimit <= 0) //반복이 없다면
return NULL; //NULL을 리턴함
else{
while(iroof < ilimit){
walker =
chp_result + strlen(chp_result) - 1;
icalculate =
0;
while(walker >= chp_result){
if(*walker >= '5'){
chp_tmp[icalculate] = (*walker - '0')*2 -10 +
Upvalue + '0';
chp_tmp[icalculate+1] =
'\0';
Upvalue = 1;
}
else{
chp_tmp[icalculate]
= (*walker - '0')*2 + Upvalue +
'0';
chp_tmp[icalculate+1] =
'\0';
Upvalue = 0; //올림수가 없으므로
0저장
}
walker--;
icalculate++;
}
//연산이 끝나고
올림받음수가 있다면
if(Upvalue == 1){
chp_tmp[icalculate] = '1';
chp_tmp[icalculate+1] =
'\0';
Upvalue = 0;
}
mystrcpy(chp_result,
chp_tmp);
iroof++;
}
}
return chp_result;
}
/*
tmp에 저장되는것은 거꾸로 저장된다.
즉 8+8 이 61로 저장된다.
그러므로
result에는 거꾸로 저장해야하므로
strcpy를 새로 작성하였다.
*/
void mystrcpy(char *to, char
*from){
char *p;
p = from + strlen(from)-1;
while(p >= from){
*to++ =
*p--;
}
*to = '\0';
}
'IT_Programming > C · C++' 카테고리의 다른 글
포인터 선언과 연산 테스트 (0) | 2007.01.24 |
---|---|
입력받은 수가 소수인지 아닌지를 알아보자 (0) | 2007.01.23 |
입력 받은 두 수의 최대 공약수를 구하는 소스 (0) | 2007.01.19 |
스택(STACK)을 이용해서 만든 계산기 (0) | 2006.12.13 |
malloc을 사용하여 동적으로 배열을 받고 처리하는 예 (0) | 2006.01.31 |