無限多倍長演算への挑戦

10^2147483647 か、ヒープ領域が許すまで、多倍長の足し算ができるプログラム。

入力する二つの数字の長さがあっていないとうまく計算できない。

Ex)

A: 123456

B:000012

答え123468

みたいに、足りない桁を0埋めしてあげないといけない。

完成していないが、経過報告。

コードは以下の通り。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void Plus(char *a, char *b, char *ans, int keta);

int main(int argc, char *argv[])
{
int i;
int aLen = strlen(argv[1]);

char *a = (char*)malloc(sizeof(char)*aLen);

for(i=0;i<aLen;i++)
{
a[i] = argv[1][i] – 48;
}

int bLen = strlen(argv[2]);

char *b = (char*)malloc(sizeof(char)*bLen);

for(i=0;i<bLen;i++)
{
b[i] = argv[2][i] – 48;
}

int abLen;

if(aLen > bLen)
abLen = aLen;
else
abLen = bLen;

char *ans = (char*)malloc(sizeof(char)*abLen);

for(i=0;i<abLen;i++)
{
ans[i] = 0;
}

for(i=abLen;i>-1;i–)
{
Plus(a, b, ans, i);
}

for(i=0;i<abLen;i++)
printf(“%d”, ans[i]);

free(a);
free(b);
free(ans);

return 0;
}

void Plus(char *a, char *b, char *ans, int keta)
{
int tmp = 0;

tmp = (a[keta] + b[keta] + ans[keta]);

if(tmp > 9)
{
ans[keta – 1]++;
ans[keta] = tmp – 10;
}
else
ans[keta] = tmp;
}