配列の10進表示

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
lbfuvab

配列の10進表示

#1

投稿記事 by lbfuvab » 16年前

環境は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進表示

#2

投稿記事 by 初級者 » 16年前

十進で出力したいときに、
どのような入力を与えて
どのような結果を得るのかを
具体的に示してください。

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

Mist

Re:配列の10進表示

#3

投稿記事 by Mist » 16年前

多倍長演算の実装なんだから例えば

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

のときに

131071

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

lbfuvab

Re:配列の10進表示

#4

投稿記事 by lbfuvab » 16年前

>>初級者 様
すいません。言葉足らずでしたm(_ _)m
Mist様の言われている通りです。

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

たいちう

Re:配列の10進表示

#5

投稿記事 by たいちう » 16年前

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進表示

#6

投稿記事 by 初級者 » 16年前

>Mistさん

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

lbfuvab

Re:配列の10進表示

#7

投稿記事 by lbfuvab » 16年前

>>たいちう 様

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る