Skip to content

Instantly share code, notes, and snippets.

@magical
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save magical/eb1462af4f3477499dcb to your computer and use it in GitHub Desktop.
Save magical/eb1462af4f3477499dcb to your computer and use it in GitHub Desktop.
// Project euler #16
#include <stdio.h>
int digits[1000] = {1};
int len = 1;
void fold() {
int i, carry = 0;
for (i = 0; i < len; i++) {
digits[i] = digits[i] + digits[i] + carry;
if (digits[i] >= 10) {
digits[i] -= 10;
carry = 1;
} else {
carry = 0;
}
}
if (carry) {
digits[i] = carry;
len++;
}
}
int sum() {
int i, r = 0;
for (i = 0; i < len; i++) {
r += digits[i];
}
return r;
}
int main() {
int i;
for (i = 0; i < 1000; i++) {
fold();
}
printf("%d\n", sum());
}
program DigitSum;
var
digits : array[1..1000] of integer;
len : integer;
procedure fold;
var
i, carry : integer;
begin
carry := 0;
for i := 1 to len do
begin
digits[i] := digits[i] + digits[i] + carry;
if digits[i] >= 10 then
begin
digits[i] := digits[i] - 10;
carry := 1
end
else
carry := 0;
end;
if carry > 0 then
begin
digits[len+1] := carry;
len := len + 1
end
end;
function sum : integer;
var
i, r : integer;
begin
r := 0;
for i := 1 to len do
begin;
r := r + digits[i]
end;
sum := r
end;
procedure main;
var
i : integer;
begin
digits[1] := 1;
len := 1;
for i := 1 to 1000 do
fold();
writeln(sum())
end;
begin
main();
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment