No.6ベストアンサー
- 回答日時:
とりあえず、上位の0の抑制は以下の変更でできると思います。
見栄え上は、桁位置を揃える必要があるでしょうから、
それぞれの保持している有効桁を求めて、
最大の保有桁数を求めて
そうした指定桁数での表示に変更するといいですね
---------------------------------------------------------------
void lineprint(char c,char* line,int maxdigit)
{
int i,maxdigitlimit;
int flag=0;
maxdigitlimit=maxdigit-1;
printf("%c",c);
for(i=maxdigitlimit;i>=0;i--){
if(flag==0 && line[i]==0)
continue;
else
flag=1;
printf("%1d",line[i]);
}
printf("\n");
return;
}
No.5
- 回答日時:
答えが5桁以内ということならこういうことかな
printf(" %5d\n", a);
printf("+%5d\n", b);
printf("=%5d\n", c);
それよりどうやって0を表示させているかを知りたいですね
この回答への補足
今まで答えて頂いた方々すみません。
質問の仕方が不適切だったので補足します。
多数桁の足し算での筆算のプログラムで
70桁まで計算する場合です。
補足にてソースが全部載せる事ができたので
以下の通りです。
#include <stdio.h>
#define MAXDIGIT 50
void reset(char*,int);
void input(char*,int);
void add(char*,char*,char*,int);
void display(char*,char*,char*,int);
void add_digit(char ,char ,char ,char* ,char* );
void display(char* ,char* ,char* ,int );
void lineprint(char ,char* ,int );
void linedraw(char ,int );
void main(void)
{
char a[MAXDIGIT],b[MAXDIGIT],c[MAXDIGIT];
reset(a,MAXDIGIT);
reset(b,MAXDIGIT);
reset(c,MAXDIGIT);
input(a,MAXDIGIT);
input(b,MAXDIGIT);
display(a,b,c,MAXDIGIT);
}
void reset(char* buf,int maxdigit)
{
int i;
for(i=0;i<maxdigit;i++)
buf[i]=0;
return;
}
void input(char* buf,int maxdigit)
{
char str[MAXDIGIT];
int i,j;
printf("input data:");
scanf("%s",str);
i=0;
while(str[i]!='\0')
i++;
j=0;
while(i>0){
buf[j]=str[i-1]-'0';
j++;
i--;
}
return;
}
void add(char* a,char* b,char* c,int maxdigit)
{
int i;
char carry_in,carry_out;
i=0;
carry_in=0;
while(i<maxdigit)
{
add_digit(a[i],b[i],carry_in,&c[i],&carry_out);
carry_in=carry_out;
i++;
}
return;
}
void add_digit(char a,char b,char carry_in,char* c,char* carry_out)
{
*c=(a+b+carry_in)%10;
*carry_out=(a+b+carry_in)/10;
return;
}
void display(char* a,char* b,char* c,int maxdigit)
{
lineprint(' ',a,maxdigit);
lineprint('+',b,maxdigit);
linedraw('-',maxdigit+1);
lineprint(' ',c,maxdigit);
return;
}
void lineprint(char c,char* line,int maxdigit)
{
int i,maxdigitlimit;
maxdigitlimit=maxdigit-1;
printf("%c",c);
for(i=maxdigitlimit;i>=0;i--){
printf("%1d",line[i]);
}
printf("\n");
return;
}
void linedraw(char c,int length)
{
int i;
for(i=0;i<length;i++)
printf("%c",c);
printf("\n");
return;
}
No.4
- 回答日時:
こういう方針で作った、練習用のプログラムだと仮定して……
int 足す数[5];
int 足される数[5];
/* 初期化 */
/* 配列を使った多桁の加算 */
for (i = 5; i >=0; i--)
printf("%d", 足す数[i]);
printf("\n");
/* 足される数と、答えも同様 */
ここで、単純に、足す数[i] == 0 で判定すると、途中の 0 も消えてしまいますね。
この流れをなるべく残すのであれば、
int 足す数のゼロでない桁見つけた = 0;
for(i = 5; i >= 0; i--)
{
if ((足す数[i] == 0) && (足す数のゼロでない桁見つけた == 0))
{ 足す数[i] の替わりに ' ' を表示; }
else
{ す数のゼロでない桁見つけた = 1}
}
こんな感じで、最初に0でない数値を見つけるまでの処理を分ければOKです。
流れをいじれば、もっとスマートな方法もありますが(一度、文字列に直すとかすれば、先行ゼロの判定がもう少しスマートになります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Excel(エクセル) excelにて、ある固定値から連番を振りたいが、上限値が異なる連番を振る処理を複数回行いたい場合 6 2022/10/22 11:01
- Java java 入力された文字列を数値に置き換えて整数にし、計算をしたいです。 <を10として /を1とし 4 2022/05/16 21:08
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf で二進表示を行いたい。
-
10個出力で改行したいのですが...
-
コマンドラインに出力した文字...
-
ブラックジャック
-
C言語で、「自然数nを入力し、n...
-
error C2143: 構文エラー : ';'...
-
scanfに文字が入力されたときに...
-
4の倍数を論理演算で表す。。
-
縦の棒グラフ
-
パスカルの三角形についてのCプ...
-
(C言語)めちゃくちゃな値にな...
-
ピラミッド表示プログラム。
-
C言語 ツェラーの公式を使った...
-
CTRL+Dでループを抜けるには
-
勝率をプログラムに
-
Visual Sutdio 2017 でのC言語...
-
%P と %X の違い
-
printf( " %2d", p * q );
-
C言語 プログラミング ごめんな...
-
printf()文の書式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報