#include<_stdio.h>
#include<_stdlib.h>
void input( long long int *f, int n )
{
int i;
for( i = 1; i <= n ; i++ ){
printf( "%d番目の数を入力。\n", i );
scanf( "%lld", &f[i] );
}
}
int calculation( long long int *f, long long int *a, int n )
{
int i = 1;
int j;
bool flag = false;
// 計算
a[1] = f[1];
while( i < 10 ){
for( j = 2; j <= n; j++ ){
a[j] = f[j] a[j1] * i;
printf( " %lld", a[j] );
}
printf( " | %lld\n", i );
printf( "%lld\n", a[n] );
printf( "%lld\n", a[j1] );
if( 1 < a[n] && a[n] < 1 ){
flag = true;
break;
}
else{
i*= 1;
if( 0 < i ){
i++;
}
}
}
// 該当する値が無ければ全て0に
if( flag == false ){
for( j = 1; j <= n; j++ ){
f[j] = 0;
a[j] = 0;
}
i = 0;
}
return i;
}
void output( long long int *f, long long int *a, int n, int s ){
int i;
for( i = 1; i <= n; i++ ){
printf( " %10lld", f[i] );
}
printf( " | %10lld\n", s );
printf( " " );
for( i = 2; i <= n; i++ ){
printf( " %10lld", a[i1] * s );
}
printf( " |\n" );
for( i = 0; i <= n; i++ ){
printf( "" );
}
printf( "\n" );
for( i = 1; i < n; i++ ){
printf( " %10lld", a[i] );
}
printf( " | %10lld\n", a[n] );
}
int main()
{
int n;
printf( "項数を入力。\n" );
scanf( "%lld", &n );
// 要素数がnの配列を作る
long long int *f = ( long long int * ) malloc ( sizeof ( long long int ) * n + 1 );
long long int *a = ( long long int * ) malloc ( sizeof ( long long int ) * n + 1 );
// データ入力
input( f, n );
// 組み立て除法
int s; // 商を受け取る変数
s = calculation( f, a, n );
// 出力
output( f, a, n, s );
return 0;
}
calculation関数の
if( 1 < a[n] && a[n] < 1 )
って分岐が何故か通らないんですよねぇ……。
直前の
printf( "%lld\n", a[n] );
printf( "%lld\n", a[j1] );
でチェックしてますけど、勿論0が出力。
言うまでもありませんが、
if( a[n] == 0 )
も通りません。
意味不明。
更に
if( a[n] < 1 )
だと成功するのに、
if( 1 < a[n] )
だと成功しない。
一体 a[n] の値は何なのかと小一時間(ry
正の数しか扱わないんだったら
if( a[n] < 1 )
こうしとけば別に問題無いんですけど、
その後のループ前の処理見ての通り、
絶対値の小さい値から正負交互に調べていくんでダメなんですよ。
因みに、 配列 a は long long int型ですが、
普通にint型だと上手くいきます。
但し、私が調べようとしている数字があまりにも大きな数でオーバーフローを起こすため使えません(´д⊂
因みにint型で扱える数値は2,147,483,647 〜 +2,147,483,647。
±21億。
あーわけわかんねー……_| ̄|○
先生なら分かるかなぁ……。
メールしてみるかなぁ……。