1. 첫 번째 방법
∑ 를 이용하여 1부터 N까지의 합을 구하면 N*(N+1) / 2 로 구할 수 있다.
#include <stdio.h>
int main()
{
unsigned char max = 100;
printf( "Sum of 1 to %d : %d\n", max, ( max * ( max + 1 ) ) / 2 );
return 0;
}
2. 두 번째 방법
첫 번째 방법을 이용하여 얻은 답을 unsigned char 형 변수로 저장하고 표현하였다.
#include <stdio.h>
int main()
{
unsigned char max = 100;
unsigned char hsum = 0, lsum = 0;
if( (( max * ( max + 1 ) ) / 2) / 256 )
{
hsum = (( max * ( max + 1 ) ) / 2) / 256;
lsum = (( max * ( max + 1 ) ) / 2) % 256;
}
else
lsum = max;
printf("Sum of 1 to %d : %d\n", max, (hsum * 256) + lsum);
return 0;
}
3. 세 번째 방법
for() 문을 이용하여 1부터 100까지 차례대로 더해가면서 그 수행결과를 unsigned char 형 변수에 저장하였다.
#include <stdio.h>
int main()
{
unsigned char i;
unsigned char max = 100;
unsigned char hsum = 0, lsum = 0;
for(i = 1; i <= max; i++)
{
if((lsum + i) > 255)
hsum++;
lsum += i;
}
printf("Sum of 1 to %d : %d\n", max, (hsum * 256) + lsum);
return 0;
}
4. 네 번째 방법
첫 번째 방법을 이용하여 얻은 답을 문자열로 저장하고 표현하였다.
str은 문자열로 저장한 것이고 compression은 각각의 자릿수를 하나의 문자로 표현한 것으로 compression의 인덱스는 10의 지수를 의미한다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
unsigned char max = 100, len = 0, comp_cnt = 0;
unsigned char *compression, *str;
str = (unsigned char *)calloc(sizeof(unsigned char), 4);
sprintf((char *)str, "%d", ((max * (max + 1)) / 2));
len = strlen((char *)str);
compression = (unsigned char *)calloc(sizeof(unsigned char), len + 1);
while(1)
{
compression[comp_cnt] = str[len - 1];
comp_cnt++;
len--;
if(len == 0)
break;
}
printf("%c%c%c%c\n", compression[3], compression[2], compression[1], compression[0]);
return 0;
}