프로그래밍

 3198, 1/160 회원가입  로그인  
   goldbear564
   c언어로 2^128구하기

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3413 [복사]


말그대로 2^128 구하기 과제를 학교에서 받았는데
배열로 구하라네요.

일단 그냥 생각나는대로 써보았는데 unsigned long long int 로 해봤는데 안되더군요.

#include<stdio.h>

int main(void)
{
        unsigned long long int arr[128];
        int i;

        arr[0]=2;

        for(i=1;i<128;i++)
        {
                arr[i]=arr[i-1]*2;
        }

        printf("%llu\n",arr[127]);
        return 0;
}

이렇게 해ㅂㅘㅅ는데 막상 실행시켜보면 0이 나오더군요.

그래서 구글링을 해보니 연결리스트로 구해보라고 하는데
연결리스트가 이해가 가질 않네요.

연결리스트를 이용한 괜찮은 예제하나만 부탁드립니다.

  Hit : 4721     Date : 2012/05/15 01:57



    
minwoo1989 괜찮지는 않지만 한번 짜봤는데요...
2^64승만 돼도 unsigned long long int 최대값보다 커지네요

#include <stdio.h>
#include <malloc.h>

struct list {
unsigned long long int data;
struct list *next;
};

typedef struct list List;

void insert(List*);

int main() {
List *head = (List*) malloc(sizeof(List));
head->data = NULL;
head->next = NULL;

// unsigned long long int의 최대값
unsigned long long int d = -1;
printf("max = %llu\n\n", d);

insert(head);

while (!head->next) {
printf("%llu", head->data);

tmp = head;
head = head->next;

free(tmp);
}

free(head);

return 0;
}

void insert(List *l) {
List *prev = l;
int i;

l->data = 2;
l->next = NULL;

for (i = 0; i < 127; i++) {printf("2^%d\n", i + 2);
List *d = (List*) malloc(sizeof(List));
d->data = prev->data * 2;
d->next = NULL;
printf("-----%llu\n", d->data);
prev->next = d;
prev = prev->next;
}
}
2012/05/16