/***************************************************************************
*
* Date : 2005-04-14
* Copyright : aucd29
* E-mail : aucd29@daum.net
*
* 실수를 문자형으로 바꾸라
*
***************************************************************************/
#include <stdio.h>
#include <string.h>
#define MAX 1000
void Reverse(char *);
void IntToStr(char *, int, int);
void SosuToStr(char *, double);
void Join(char *, char *);
int main(int argc, char *argv[])
{
double fInput=0.0;
char s[MAX],sign=0;
char s2[MAX];
int iInput=0;
scanf("%lf",&fInput);
printf("Input data : %lf\n", fInput);
if(fInput < 0.0)
{
sign=1;
fInput *= -1;
}
iInput = (int)fInput;
IntToStr(s,iInput,sign); // 소수점 이상을 떼주고
Reverse(s); // 돌리고
//printf("%d, %f, %f\n",iInput, fInput, fInput-iInput);
SosuToStr(s2,(fInput - iInput));
//printf("바꼇냐? : %s\n",s2);
Reverse(s2);
//printf("바꼇냐?2 : %s\n",s2);
Join(s,s2);
printf("output data : %s\n",s);
return 0;
}
void IntToStr(char *s, int iInput, int kind)
{
int i=0;
while(1)
{
if(iInput)
{
s[i++] = (iInput % 10) + '0';
iInput /=10;
} else break;
}
if(kind)
{
s[i]='-';
s[i+1]='\0';
}
else s[i]='\0';
}
//
// 문자 뒤집자
//
void Reverse(char *s)
{
int i=0, len = strlen(s)-1;
char tmp;
while(i<len)
{
tmp = s[len];
s[len] = s[i];
s[i] = tmp;
++i;--len;
}
}
//
// 소수점 처리
//
void SosuToStr(char *s, double val2)
{
int i=0,c,val;
val = (int)(val2 * 1000000);
do
{
if((c=(val % 10)) || i>0)
{
s[i] = c + '0';
++i;
}
}
while(val/=10);
s[i]='\0';
}
//
// 두개의 문자열을 합친다. s, s2를 s+=s2한다.
//
void Join(char *s, char *s2)
{
int len = strlen(s), j=0;
char c;
s[len] = '.';
while((c=s2[j++])!='\0')
{
s[++len] = c;
}
s[++len] = '\0';
s2[0] = '\0'; // s2 free
}
*
* Date : 2005-04-14
* Copyright : aucd29
* E-mail : aucd29@daum.net
*
* 실수를 문자형으로 바꾸라
*
***************************************************************************/
#include <stdio.h>
#include <string.h>
#define MAX 1000
void Reverse(char *);
void IntToStr(char *, int, int);
void SosuToStr(char *, double);
void Join(char *, char *);
int main(int argc, char *argv[])
{
double fInput=0.0;
char s[MAX],sign=0;
char s2[MAX];
int iInput=0;
scanf("%lf",&fInput);
printf("Input data : %lf\n", fInput);
if(fInput < 0.0)
{
sign=1;
fInput *= -1;
}
iInput = (int)fInput;
IntToStr(s,iInput,sign); // 소수점 이상을 떼주고
Reverse(s); // 돌리고
//printf("%d, %f, %f\n",iInput, fInput, fInput-iInput);
SosuToStr(s2,(fInput - iInput));
//printf("바꼇냐? : %s\n",s2);
Reverse(s2);
//printf("바꼇냐?2 : %s\n",s2);
Join(s,s2);
printf("output data : %s\n",s);
return 0;
}
void IntToStr(char *s, int iInput, int kind)
{
int i=0;
while(1)
{
if(iInput)
{
s[i++] = (iInput % 10) + '0';
iInput /=10;
} else break;
}
if(kind)
{
s[i]='-';
s[i+1]='\0';
}
else s[i]='\0';
}
//
// 문자 뒤집자
//
void Reverse(char *s)
{
int i=0, len = strlen(s)-1;
char tmp;
while(i<len)
{
tmp = s[len];
s[len] = s[i];
s[i] = tmp;
++i;--len;
}
}
//
// 소수점 처리
//
void SosuToStr(char *s, double val2)
{
int i=0,c,val;
val = (int)(val2 * 1000000);
do
{
if((c=(val % 10)) || i>0)
{
s[i] = c + '0';
++i;
}
}
while(val/=10);
s[i]='\0';
}
//
// 두개의 문자열을 합친다. s, s2를 s+=s2한다.
//
void Join(char *s, char *s2)
{
int len = strlen(s), j=0;
char c;
s[len] = '.';
while((c=s2[j++])!='\0')
{
s[++len] = c;
}
s[++len] = '\0';
s2[0] = '\0'; // s2 free
}
'Native > C' 카테고리의 다른 글
에제 2-4 (0) | 2013.10.02 |
---|---|
StrMove (문자열에서 특정이후 문자를 수만큼 이동) (0) | 2013.10.02 |
Circular shift complete ver (0) | 2013.10.02 |
reverse (0) | 2013.10.02 |
104 (0) | 2013.10.02 |