とりあえず、作ってみました。
char 型のバッファを使っていますが、
各くバイトには 0 - 9 の範囲の値をとる形にしています。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MIN_N_FIG (0)
#define MAX_N_FIG (80)
//
// バッファ上の数値を 10進数 演算で加算する
// a = a + b;
//
void StrAdd(char *a, char const * b)
{
size_t i;
int cy;
int wk;
char * org_a;
org_a = malloc(MAX_N_FIG);
memcpy(org_a, a, MAX_N_FIG);
cy = 0;
for (i = 0U; i < MAX_N_FIG; i++) {
wk = *(org_a + i) + *(b + i) + cy;
*(a + i) = wk % 10;
cy = wk / 10;
}
free(org_a);
}
//
// バッファ上の数値を 10進数 演算で 3倍する
// a = a * 3;
//
void StrMul3(char *a)
{
char * org_a;
org_a = malloc(MAX_N_FIG);
memcpy(org_a, a, MAX_N_FIG);
StrAdd(a, org_a);
StrAdd(a, org_a);
free(org_a);
}
//
// バッファ上の数値を 表示
//
void StrPrt(char const * a)
{
size_t i;
int bFirstDt;
bFirstDt = 0;
for (i = MAX_N_FIG; 0 < i; i--) {
if (*(a + i - 1) != 0) {
bFirstDt = 1;
}
if (bFirstDt != 0) {
printf("%c", *(a + i - 1) + '0');
}
}
printf("\n");
}
int main(void)
{
int n;
char buf[2 + 1];
char Cbf[MAX_N_FIG];
char Cwk[MAX_N_FIG];
printf("N を入力して下さい ==> ");
fgets(buf, sizeof(buf), stdin);
n = atoi(buf);
if (MIN_N_FIG < n && n < MAX_N_FIG) {
memset(Cbf, 0, sizeof(Cbf));
memset(Cwk, 0, sizeof(Cwk));
Cbf[0] = 1;
while (1) {
memcpy(Cwk, Cbf, MAX_N_FIG);
StrMul3(Cbf);
if (Cbf[n] != 0) {
break;
}
}
StrPrt(Cwk);
}
else {
printf("N は %d < N < %d の範囲でなくてはなりません。\n", MIN_N_FIG, MAX_N_FIG);
}
return(0);
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/25 09:05