件名の説明:
[+ - ]科学者、科学的表記法は、正規表現が大きいまたは非常に少数のための便利な方法を表すために使用される。[1-9] [0-9] + E [+ - ] [0 -9] +、すなわち、ナンバーワンの整数部のみが、デジタル符号及び指数部分が明示的にも正について説明しなければならない少なくとも一つの小数部があります。 実数次に方法Aの一般的なデジタル表現としてプログラムの出力を書き込み、すべての有効ビットは予約されていることを保証するために、科学的表記形式で与えられます。 入力フォーマット: 各入力はテスト、すなわち、Aで表される科学的表記の実数を含みます この数は、長さが9999のバイトを超え、絶対値は9999のインデックスよりもない記憶していません。 出力フォーマット: 一般的な方法でデジタル出力の表現、および終了時に0を含め、すべての有効ビットが保持されることを確実にすることにより行の各テストケースについて。 入力サンプル1: + 03 1.23400E- 出力サンプル1: 0.00123400 入力サンプル2: -1.2E + 10 出力サンプル2: -12000000000
キー問題解決:
デジタル読み取り、文字列の1.使用。
2シンボルの決意は、数字は、正の出力を持っていない、負の数が出力されなければなりません。
正と負のポイントの整数に最初の文字列のインデックス、3.考察が計算されます。
(1)インデックスが「0」の符号ビットが「0」の直後に出力され、その後、最初の非ゼロ進数との間に挿入され、負であり、小数点の出力が再び必要ではありません。
(2)指標は正であり、そして小数点は、元の文字列の長さLEN E EXP指数サイズとの間で決定され、その後小数点の位置を決定します。
ACコード:
// PAT_1024_科学的表記 #ザには、<stdio.hの> #ザ含む<string.hの> #ザには、<STDLIB.H> #100000定義最大 INTメイン(ボイド) { チャーS [最大]、S_num [最大]; INT 0 = I、J = 0、EXP、0 = LEN、 取得(S); //プット(S); //出力シンボル(数字が出力を必要はない)の数 IF(S [0] == ' - ') printf( "%C"、S [0]); ながら(!S [I] = 'E')私は++; //数Eを抽出した後 のstrcpy(S_num、S + I + 1); //プット(S_num ); //数値整数に変換 EXP = ATOI(S_numを); //のprintf( "%Dの\のN-"、EXP); 論じ正と負の点の//インデックス、負の IF(EXP <0) { のprintf( " 0 "); //の小数点後の出力0 (J = EXPため; J < -1。J ++) のprintf(" 0「)。 記号E外側の間に小数点以外//出力文字 (I = 1つの;! S [I] = 'E'; I ++の)のために { IF(= S [I]! '') のprintf( "%C"、S [I]); } } //インデックスタイミング 他 { // Eとの間の小数文字列の長さに記録 するための(I = 2つの;! S [I]は= 'E'; Iは++) { IF(S [I] =! '') LEN ++; } 長// //のprintf( "%Dの\のN-"、LEN); //指数EXPと長さの大きさをLEN比較 // EXP> LEN小数出力せず終了時のゼロパディング、 IF(EXP> = LEN) { 用( I = 1 ;! S [I] = 'E'; Iは++) { )=(S [I] IF! '' のprintf( "%C"、S [I]); } (I = 0、I <EXP-LEN;私は++) のprintf( "0" } // EXP <LEN小数点のEXPビット出力で 他 { 用(i = 1; S [I] = 'E';!私は++) { IF(! '' S [I] =) のprintf( "%cを" S [I])。 (I == EXP + 2)の場合 のprintf( ""); } } } 0を返します。 }
RRR