乗算アルゴリズムブースJavaの簡単な実現を補完します

このプログラムは、エラーコードがある場合、あなたは、私は時々変更するだろう指摘することができ、補数乗算を達成することは容易です。

簡単な概要:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

コードの実装:

パッケージself_make。

インポートjava.util.Scanner;

//補数乗算(ブースアルゴリズム:ブースアルゴリズム)
パブリッククラスbooth_test {
静的スキャナscanofX、
静的スキャナscanofY。

静的な無効メインパブリック(文字列[]引数){
//入力エリア

//タイプX値
一方は(真の){
System.out.printの( "7未満Xの与えられた点を入力してください");
scanofX =新しい新しいスキャナ(System.in)を、
文字列scanofX.nextLine X =();
CHAR X [] = x.toCharArray(); // 文字列に文字列を
文字Xnの[] = x.toCharArray() 。

//入力された値が満たしているチェック
IF(falseにチェック(X-)は==){
続行;
}
//タイプY値
System.out.print( "7未満Yの与えられた点を入力してください:");
scanofY新しい新しいです=スキャナ(System.in);
文字列scanofY.nextLine Y =();

チャー[] = y.toCharArray()。
(チェック(Y)==偽){もし
続けます。
}

//初期化領域
INT ycount = 0; //遮断するY値
INT CCOUNT = 0、シフトの数記録するための//乗算演算
チャーgetfA [] =新しいCHAR [ 5]。

//真の値が負である
// [-X-]補体
IF( ' - ' X- [0] ==){
Xnの[0] = '0';
(INT I =ため1; I <= x.length - 1。 ; I ++){
IF(Xnの[I] ==&Xnの[I] =){ '1' !'。 '
Xnの[I] =' 1' ;
}そうIF(Xnの[I] == '0' & XN [I] =){! ''
XN [I] = '0';
}他{
XN [I] =」。 ';
}
}
// [X-]補体
X- [0] =' 1' ;
INT countx = 0; //右から左のインデックス値1に最初の桁を記録
するための(INT I = x.length - 1、I> 0; i--){
IF(X- [I] ==「1 '){
X- [I] =' 1「;
countx = I;
BREAK;
}
}
//添字左ビット単位
(INT I = 1; I <countx; I ++){
IF(X- [I] = = '1' &! '' - X [I] =){
X [I] = '0';
IF他}(X- [I] == '0' X - && [I] =! ' '){
X- [I] =' 1 ';
}他{
'' X- [I] =;
}
}
//同じ添字の右側
のための(INT I = countx; I <= x.length - 1; I ++){
IF(「1 'X- [I] ==){
X- [I] =' 1' ;
}そうIF( X- [I] == '0'){
X- [I] = '0';
}
}
System.out.printの( "[X-]補数である:");
(INTのために私は= 0; I <x.length ; I ++){
System.out.printの(X- [I]);
}
System.out.printの( "\ T [-X-]までのように:");
のための(INT I = 0; I <Xn.length; I ++ ){
System.out.print(Xnのの[I]);
}
}
//それが本当に正の数であり、nは数自体が補完される場合に
そうIF(X- [0] == '+'){
X- [0] = "0 ';
System.out.printの(' [X-]補体です:「);
){ Xnの[I] = '1'; }他{ Xnの[I] = '';
























}
}
//下标右边不变
ため(INT I = countXn; I <= Xn.length - 1; I ++){
IF(! '' Xnの[I] == '1' &Xnの[I] =) {
Xnの[I] = '1';
}そうであれば(Xnの[I] == '0' &Xnの[I] =! ''){
Xnの[I] = '0';
}
}
System.out.print( "\ T [-X]补为:")。
以下のために(INT iが= 0; I <Xn.length; I ++){
System.out.print(Xnの[I])。
}
}そうであれば(X [0] == '0'){
文字列xtemp = String.valueOf(X)。
xtemp = "0" + xtemp。
X = xtemp.toCharArray()。
System.out.print( "[X]补为:")。
以下のために(INT iが= 0; I <X.length; I ++){
System.out.print(X [I])。
}
// Xnの
Xnの= xtemp。toCharArray();
XN [0] = '1';
! '' &Xnの[I] =){ Xnの[I] = '0'; } }

























System.out.print( "\トン[-X]补为:");
以下のために(INT iが= 0; I <Xn.length; I ++){
System.out.print(Xnの[I])。
}
}
のSystem.out.println();

// Y值部分
であれば(Y [0] == ' - '){
//左移覆盖
ため(INT I = 0、I <Y.length - 2; I ++){
Y [I] = Y [I + 1]。
}
Y [Y.length - 1] = 0;
Y [0] = '1';
以下のために(; I <Y.length、整数iが0 = I ++){
IF(Y [I] == 0){
ycount = I。
}
}
int型の郡= 0。//记录从右至左第一位数值为1的下标
ため(INT I = ycount; I> 0; i--){
IF(Y [I] == '1'){
Y [I] = '1';
郡= I;
ブレーク;
}
}
//下标左边按位取反
(iは1 = INT; I <郡; iは++)のために{
(! '' '1' Y [I] ==&Y [I] =)であれば{
Y [ I] = '0';
}それ以外の場合(Y [i]が== '0' &Y [i]が!= ''
){ Y [I] = '1';
}エルス{
Y [I] = '';
}
}
//下标右边不变
ための(iは郡= int型; I <= ycount; I ++){
IF(Y [I] == '1'){
Y [I] = '1';
}そうであれば(Y [I] == '0'){
Y [I] = '0';
}
}
System.out.print( "[Y]补为:")。
以下のために(INT iが= 0; I <Y.length; I ++){
System.out.print(Y [I])。
}
}
//若真值为正数、正数补码为本身
そうであれば(Y [0] == '0'){
ycount = Y.length。
System.out.print( "[Y]补为:")。
以下のために(INT iが= 0; I <Y.length; I ++){
System.out.print(Y [I])。
}
}そうであれば(Y [0] == '+'){
ycount = Y.length。
(INT iについて0 =; I <Y.length - 2。
I ++){ Y [I] = Y [I + 1]。
}
System.out.print( "[Y]补为:")。
以下のために(INT iが= 0; I <Y.length; I ++){
System.out.print(Y [I])。
}

}

} A [3] = A [0]。A [2] = ''; CCOUNT ++;





















}そうなら(C [I] == '0' &C [I + 1] == '1'){// CnCn + 1为01情况
和(A、X)。
getfA [CCOUNT] = A [A.length - 1]。
//右移
ため(INT J = A.length - 1、J> 0; j--){
A [j] = A [J - 1]。
}
A [3] = A [0]。
A [2] = '';
CCOUNT ++;
}そうなら(C [I] == '1' &C [I + 1] == '0'){// CnCn + 1为10情况
和(A、Xnの);
getfA [CCOUNT] = A [A.length - 1]。
//右移
ため(INT J = A.length - 1、J> 0; j--){
A [j] = A [J - 1]。
}
A [3] = A [0]。
A [2] = '';
CCOUNT ++;
}そうなら(C [I] == ''){
IF(C [iは、 - 1] == '0' &C [I + 1] == '1'){
SUM(A、X)。
CCOUNT ++;
ブレーク;
}そうなら(C [I - 1] == '1' &C [I + 1] == '0'){
SUM(A、Xnの);
CCOUNT ++;
ブレーク;
}他{
ブレーク。
}
}
}
System.out.print( "\ nは结果为:")。
以下のために(INT iが= 0; I <A.length; I ++){
System.out.print(A [I])。
}
ため(INT iは= 0; I <getfA.length; I ++){
System.out.print(getfA [I])。
}
System.out.print( "\ n");
}
}

//累加函数、二进制加法
静的パブリックCHAR []和{([]、チャーB []文字)
のchar []結果を=。
INT C = 0; //进位C
のための(INT I =てb.length - 1; I> = 0; i--){
IF( '' ==(B [I])){
結果[I] = '';
}そうなら(C == 0){
IF([I] == '1' &B [I] == '1'){
結果[I] = '0';
C = 1。
}そうであれば([I] == '1' &B [I] == '0'){
結果[I] = '1';
C = 0。
}そうであれば([I] == '0' &B [I] == '1'){
結果[I] = '1';
C = 0。
}そうであれば([I] == '0' &B [I] == '0'){
結果[I] = '0';
C = 0。
}
}そうIF(C == 1){
IF([I] == '1' &B [I] == '1'){
結果[I] = '1';
C = 1。
}そうであれば([I] == '1' &B [I] == '0'){
結果[I] = '0';
C = 1。
}そうであれば([I] == '0' &B [I] == '1'){
結果[I] = '0';
C = 1。
}そうであれば([I] == '0' &B [I] == '0'){
結果[I] = '1';
C = 0。
}
}
}
結果を返します。
}

//チェック機能、入力文字形式かどうかを
静的パブリックブールチェック(CHAR [] A){
trueにブール=内のフラグ; //が有効かどうかの文字を記録する
int型countc = 0; //レコード'+「 - 」いいえ番号
INT countd = 0; '' // レコード
IF(a.length> = 8){
System.out.printの( "フォーマットエラーは、\ N-再入力してください");
のフラグ= falseにする;
}
IF(A [ !!! 0] = '0' &A [0] = '+' &A [0] = ' - '){
System.out.printの( "フォーマットエラー、\ N-再入力してください");
のフラグ偽=まで;
}
(A [0] == '0'){IF
IF {(A [1] =! '')
System.out.printの( "フォーマットエラー、\ N-再入力してください")
のフラグをfalseに=。
}
のための(INT I = 2、I <a.length; I ++){
IF(!! A [I] = '0' &A [I] =」1' ){
のSystem.out。印刷( "フォーマットエラーが、\ N-再入力してください");
のフラグをfalseに=;
BREAK;
}
}
}
IF(A [0] == '+' | A [0] == ' - '){
(! '' A [2] =){IF
System.out.printの(「フォーマットエラー、再入力してください\ n ");
のフラグ= falseに;
}
![1] IF(A = '0' &A =」1' ){[1]!
System.out.printの("フォーマットエラー、再入力してください\ n ") ;
;のフラグ= falseに
}
ため(INT I = 3; I <a.length; I ++){
(!! A [I] = '0' &A [I] =」1' ){IF
System.out.printの( "フォーマットエラーは、\ N-再入力してください");
でフラグを偽=に、
BREAKを;
}
}
}
(INT I = 0; I <a.length; I ++)のために{
IF(A [I] == '+' & A [I] == ' - '){
countc ++;
}
}
。IF(countc> 1){
System.out.printの( "フォーマットエラー、 "\ N-再入力してください);
内のフラグはfalseに=;
}
用(INT I = 0; I <a.length; I ++){
IF( '' A [I] ==){
countd ++;
}
}
IF(countd> 1){
不正なSystem.out.print(「の、 ) "\ N-再入力してください;
内のフラグがfalseに=;
}
フラグにリターン;
}
}

 

おすすめ

転載: www.cnblogs.com/xiaohu12138/p/11955619.html