<< プロジェクトオイラー問題12 | top | プロジェクトオイラー問題14 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

プロジェクトオイラー問題13

 50桁の数が100個与えられていてこれを足せという問題。
愚直に50個足すということは出来ない。64bit整数型でも桁が足りない。
でもそんなに難しくない。
コードは続きから。
筆算をアルゴリズムにすればいいだけだ。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define WIDTH 50
#define HEIGHT 100

int GetDig(int n,int i)
{
    char str[256];
    sprintf(str,"%d",n);

    int len = strlen(str);//len-1が最初の桁(0桁目)
   
    if(len-1-i < 0) return -1;
    return str[len-1-i] - '0';
}


int main()
{
    FILE *fp = fopen("PE13.txt","r");
    int num[WIDTH*HEIGHT];
    char tmp;
    int i = 0,j;
    while((tmp=fgetc(fp))!=EOF)
    {
        if(tmp!='¥n') num[i++] = tmp - '0';
    }
    fclose(fp);
    int r[256];
    for(i=0;i<256;i++) r[i] = 0;
    for(i=0;i<WIDTH;i++)//iの範囲
        for(j=0;j<HEIGHT;j++)
        {
            r[WIDTH-i-1] += num[i+j*WIDTH];
        }
   
    for(i=0;i<256;i++)
    {
        j = 0;
        while(GetDig(r[i],j)!=-1)
        {
            if(j!=0) r[i+j] += GetDig(r[i],j);
            j++;
        }
        r[i] = GetDig(r[i],0);
    }
    for(i=255;i>=0;i--)
    {
        printf("%d",r[i]);
    }
   
   
   
    return 0;
}
ジャジャガッチ | 数学 | 22:21 | comments(0) | trackbacks(0) |

スポンサーサイト

スポンサードリンク | - | 22:21 | - | - |
Comment









Trackback
URL:

06
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH