/*์†Œ๊ฐœ๋ง*/

/******************************************************

๋ชฉ์ : ์ผ์˜ ์ž๋ฆฌ(4์ž๋ฆฌ๊นŒ์ง€)์™€ ์‹ญ์˜ ์ž๋ฆฌ(5์ž๋ฆฌ๋ถ€ํ„ฐ)์—์„œ ๋ฐ˜์˜ฌ๋ฆผ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ

******************************************************/



/**********************************************

๋ฌธ์ œ์ .

ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ 2์ž๋ฆฌ 3์ž๋ฆฌ 5์ž๋ฆฌ์—์„œ๋Š” ์ž˜ ์ž‘๋™์ด ๋˜๋‚˜ ๋‹ค๋ฅธ ์ž๋ฆฟ์ˆ˜์—์„œ๋Š” ์ž˜ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

์•„๋งˆ ์ƒ์ˆ˜ ๋ฌธ์ œ๋ผ๊ณ  ์ถ”์ธกํ•จ. (์ง€๊ธˆ์€ ๊ทธ๊ฒƒ๋“ค๋„ ์•ˆ๋œ๋‹ค.)

************************************************/


#include

#include <math.h>


int main(void) {

Start:

int N/*ํˆฌ์ž… ๊ฐ’*/,

Log_I/*๋กœ๊ทธ์˜ ์ •์ˆ˜ ๋ถ€๋ถ„*/,

Log_JN/*๋กœ๊ทธ ๋น„๊ต ์ž์—ฐ์ˆ˜ ์ง„์ˆ˜ ๋ถ€๋ถ„*/,

Simi/*๊ทผ์‚ฌ๊ฐ’*/,

n/*์ž๋ฆฟ์ˆ˜*/,

High_Ex/*์ตœ๊ณ  ์ž๋ฆฌ ์ˆซ์ž๋ฅผ ๋บ€ ๊ฐ’*/,

r=0/*๋ฐ˜๋ณต ํšŸ์ˆ˜*/;


double Log_D/*๋กœ๊ทธ ์†Œ์ˆ˜ ๋ถ€๋ถ„*/;





// ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ N ์„ ๋ฐ›๋Š” ๋ถ€๋ถ„

N = 0;

printf("๊ทผ์‚ฌ๊ฐ’์„ ์•Œ๊ณ  ์‹ถ์€ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์‹œ์˜ค. (๋‹จ, ์Œ์ˆ˜์™€ 0์€ ์ œ์™ธํ•จ.) ");

scanf_s("%d", &N);


if (N <= 0) {

printf(" ์Œ์ˆ˜์™€ 0์€ ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.");

return 0;

}


// N ์ด ๋ช‡์ž๋ฆฌ ์ˆ˜์ธ์ง€ ์•Œ์•„๋ณด๋Š” ๋ถ€๋ถ„

Log_I = (int)(log10((double)N));

n = (int)Log_I + 1;


// N ์ด 5์ž๋ฆฌ์ˆ˜ ๋ฏธ๋งŒ์ธ ๋ถ€๋ถ„

if (n

Log_D = log10((double)N) - Log_I;

for (Log_JN = 2; Log_JN <= 100; Log_JN++) {

if (log10((double)Log_JN) <= Log_D && Log_D

High_Ex = N - (Log_JN * pow(10, (n-1)));

goto Repeat_One_N;

}

}


Repeat_One_N:

for (Log_JN = 2; Log_JN <= 100; Log_JN++) {

Log_I = (int)(log10((double)High_Ex));

Log_D = log10((double)High_Ex) - Log_I;

if (log10((double)Log_JN) <= Log_D && Log_D

if (n - 2 - r > 2) {

High_Ex = High_Ex - (Log_JN * pow(10, (n - 2 - r)));

}

n = n - 1;

r++;

Log_JN = 2;

if ((n - 2 - r) <= 0) {

goto Half_Up_1;

}

}

}


Half_Up_1:

if (High_Ex >= 5) {

Simi = N - High_Ex + 10;

} else {

Simi = N - High_Ex;

}

}


// N ์ด 5์ž๋ฆฌ์ˆ˜ ์ด์ƒ์ธ ๋ถ€๋ถ„

if (n >= 5) {

Log_D = log10((double)N) - Log_I;

for (Log_JN = 2; Log_JN <= 100; Log_JN++) {

if (log10((double)Log_JN) <= Log_D && Log_D

High_Ex = N - (Log_JN * pow(10, (n - 1)));

goto Repeat_two_N;

}

}



Repeat_two_N:

for (Log_JN = 2; Log_JN <= 100; Log_JN++) {

Log_I = log10((double)High_Ex);

Log_D = log10((double)High_Ex) - Log_I;

if (log10((double)Log_JN) <= Log_D && Log_D

if (n - 2 - r >= 2) {

High_Ex = High_Ex - (Log_JN * pow(10, (n - 2 - r)));

}

n = n - 1;

r++;

Log_JN = 2;

if ((n - 2 - r) <= 1) {

goto Half_Up_2;

}

}

}


Half_Up_2:

if (High_Ex >= 50) {

Simi = N - High_Ex + 100;

}

else {

Simi = N - High_Ex;

}

}


// ๊ทผ์‚ฌ๊ฐ’์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„

printf(" ๊ทผ์‚ฌ๊ฐ’์€ %d์ž…๋‹ˆ๋‹ค.", Simi);


// ๋‹ค์‹œ ํ•  ๊ฒƒ์ธ๊ฐ€ ๋ชฏ๋Š” ๋ถ€๋ถ„

printf(" ๋‹ค์‹œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (๋‹ค์‹œ ํ•˜๋ ค๋ฉด 1 ์ž…๋ ฅ)");

scanf_s("%d", &r);

printf(" ");

if (r == 1) { goto Start; }

return 0;

}





๋ญ๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ์š” ใ… ใ… 

(stdio.h๋Š” ์ ์—ˆ๋Š”๋ฐ ์‚ฌ๋ผ์ง€๋„ค์š” ๋””์‹œ์— ์˜ฌ๋ฆฌ๋‹ˆ๊นŒ)