ページ 11

配列の10進表示

Posted: 2009年4月10日(金) 17:20
by lbfuvab
環境はVC++2008ExpressEditionです。

今unsigned short型の要素数10個の配列で多倍長演算の実装をしています。
表示用の関数で10進数の表示にしたいのですが、全然出来ませんorz
どうかやり方を教えてください。
現在は苦肉の策で16進の表示をしています↓
#include<stdio.h>
#define N 20

typedef unsigned short uint16;

int PrintMpa(const uint16 a[N]){
	int i;
	//冗長な部分の読み飛ばし↓
	for(i=0;i<N;i++)
		if(a)
			break;
	//4桁ごとに表示↓
	while(i<N)
		printf("%04X",a[i++]);
	//改行の出力↓
	putchar('\n');
	return 0;
}

Re:配列の10進表示

Posted: 2009年4月10日(金) 18:40
by 初級者
十進で出力したいときに、
どのような入力を与えて
どのような結果を得るのかを
具体的に示してください。

今十六進で出力しているかどうかは、
問題の解決に何ら影響しません。

Re:配列の10進表示

Posted: 2009年4月10日(金) 18:45
by Mist
多倍長演算の実装なんだから例えば

a[19] = 0xFFFF
a[18] = 0x1
a[0~17] = 0

のときに

131071

というように表示したいってことでしょう。
わざわざ書かなくても多倍長演算という言葉でわかる範囲だと思いますけど。

Re:配列の10進表示

Posted: 2009年4月10日(金) 21:18
by lbfuvab
>>初級者 様
すいません。言葉足らずでしたm(_ _)m
Mist様の言われている通りです。

>>Mist 様
補足有難うございます。
色々考えてみたのですが全部誤差が出ますorz

Re:配列の10進表示

Posted: 2009年4月10日(金) 21:27
by たいちう
Mist氏の補足がなければ、私にも仕様が分からなかったな。
30分もかかってしまった。orz
a[/url]の使い方が逆順なのは私の好みです。許してね。
#include <stdio.h>
#define N         20
#define BITS      16
#define LIMIT 100000
typedef unsigned short uint16;

int PrintMpa(const uint16 a[N]) {
	int sum[N], buf[N], i, j;

	// 合計と2^xの初期化
	for (i = 0; i < N; i++)
		sum = buf = 0;
	buf[0] = 1;

	// a[N]のビットの数だけループ
	for (i = 0; i < N * BITS; i++) {
		printf("%d : \n", i);
		
		// sum += 2^i
		if (a[i / BITS] & (1 << (i % BITS))) {
			for (j = 0; j < N; j++) {
				sum[j] += buf[j];
				if (sum[j] > LIMIT) {
					sum[j] -= LIMIT;
					sum[j + 1]++;
				}
			}
		}

		// 2^i を更新
		for (j = 0; j < N; j++)
			buf[j] *= 2;
		for (j = 0; j < N; j++)
			if (buf[j] > LIMIT) {
				buf[j] -= LIMIT;
				buf[j + 1]++;
			}
	}

	// 表示
	for (int i = N - 1; i >= 0; i--)
		printf("%05d ", sum);
	printf("\n");

	return 0;
}

int main()
{
	uint16 a[N];
	int i;

	// a[0]が一番小さい位
	for (i = 0; i < N; i++)
		a = 0;
	a[1] = 0x1;
	a[0] = 0xFFFF;

	PrintMpa(a);

	return 0;
}

Re:配列の10進表示

Posted: 2009年4月10日(金) 21:39
by 初級者
>Mistさん

私は、文章で具体的に示された内容だけをもとに回答する主義です。
質問者の真意をあれこれ推し量ることはしません。
私にとっては、書かれた内容だけがすべてです。
なお、このことについて論じ合うつもりはありません。

Re:配列の10進表示

Posted: 2009年4月11日(土) 15:30
by lbfuvab
>>たいちう 様

>Mist氏の補足がなければ、私にも仕様が分からなかったな。
>30分もかかってしまった。orz
>a[/url]の使い方が逆順なのは私の好みです。許してね。

本当に有難うございます。
以後は分かりやすく書く事が出来る様努力します。