阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。 【说明】 本程序的功能是实现任意两个大整数的乘法运算,例如: 输入整数1:8934793850094505800243958034985058 输入整数2:234

admin2010-01-15  29

问题 阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。
    【说明】
   本程序的功能是实现任意两个大整数的乘法运算,例如:
   输入整数1:8934793850094505800243958034985058
   输入整数2:234584950989689084095803583095820923
   二者之积:
   209596817742739508050978890737675662366433464256830959194834854876 8534
   【C++代码】
   #include<iostream.h>
   const int MAXINPUTBIT=100;
   const int MAXRESULTBIT=500;
   class LargeNumber{
       int i,j;
       int temp;
       int one[MAXINPUTBIT+1];
       int onebit;    //one的位数
       int two[MAXINPUTBIT+1];
       int twobit;              //two的位数
       int result[MAXRESULTBIT+1];
   public:
       LargeNumber();
       ~LargeNumber();
       int inputone();          //出错返叫0,否则返回1
       int inputtwo();          //同上
       void multiplication();   //乘
       void clearresult();      //清零
       void showresult();       //显示
   };
   LargeNumber∷LargeNumber()
   {
       for(i=0;i<=MAXINPUTBIT;i++)
       {
           one=0;
           two=0;
       }
       onebit=0;
       twobit=0;
       inputone();
       inputtwo();
   }
   LargeNumber∷~LargeNumber()
   {
   }
   int LargeNumber∷inputone()
   {
       char Number[MAXINPUTBIT+1];
       cout<<"Please enter one:";
       cin>>Number;
       i=0;
       j=MAXINPUTBIT;
       while(Number!=’\0’)
           i++;
       onebit=i;
       for(i--;i>=0;i--,j--)
       {
           if(int(Number)>=48&&int(Number)<=57)
                 (1);    //由字符转换为数字
           else
               return 0;
       }
       return 1;
   }
   int LargeNumber∷inputtwo()
   {
       char Number[MAXINPUTBIT+1];
       cout<<"Please enter two:";
       cin>>Number;
       i=0;
       j=MAXINPUTBIT;
       while(Number!=’\0’)
           i++;
       twobit=i;
       for(i--;i>=0;i--,j--)
       {
           if(int(Number)>=48&&int(Number)<=57)
               two[j]=int(Number-48);    //由字符转换为数字
           else
               return 0;
       }
       return 1;
   }
   void LargeNumber∷multiplication()    //乘法
   {
       clearresult();
       int m;
       for(i=MAXINPUTBIT;i>=0;i--)
       {
           temp=two;
           for(j=(2),m=MAXINPUTBIT;m>=0;m--,j--)
           {
               result[j]+=temp*one[m];
               if(result[j]>9)
               {
                   result[j-1]+=result[j]/10;
                     (3);
               }
           }
       }
       cout<<"one*two=";
       showresult();
   }
   void LargeNumber∷showresult()
   {
       i=0;
       while(result==0&&i<=MAXRESULTBIT)
           i++;
       if(i>MAXRESULTBIT)
           cout<<"0";    //输出0
       for(;i<=MAXRESULTBIT;i++)
           cout<<(4);
       cout<<endl;
   }
   void LargeNumber∷clearresult()
   {
       for(i=0;i<=MAXRESULTBIT;i++)
             (5);
   }
   void main()
   {
       LargeNumber a;
       a.multiplication();
}

选项

答案(1)one[j]=int(Number[i]-48) (2)MAXRESULTBIT-(MAXINPUTBIT-i) (3)result[j]%=10 (4)result[i] (5)result[i]=0

解析 本题考查用C++实现大整数的乘法运算。
   题目要求程序能实现从键盘任意输入的两个大整数的乘法运算。在程序中定义了一个大整数类,在类中抽象了大整数的一些属性,如长度等,还声明了一些操作,有对大整数输入的操作和对大整数求乘积的操作等。下面来具体[分析]程序。
   第(1)空在第一个大整数的输入函数中,根据此空后面的注释我们知道,其功能是把字符转换为数字。在这里需要注意的是,从键盘输入的是字符型的一串字符,此空所在的条件判断语句是用来把这串字符中的数字找出来,接下来就是此空,要求把字符型的数字转换为整型的数字,而字符型数字与整型数字之间的ASCⅡ码值相差48。从第二个大整数的输入函数中,我们也可以很容易知道此空答案为one[j]=int(Number-48)。
   第(2)空在对大整数求乘积的函数中,是一个循环的初始条件,从程序中不难看出,这个二重循环是用来实现对两个大整数求乘积的,而变量j是用来存放计算结果数组的当前下标的,根据乘法的规则,不难得出此空答案为MAXRESULTBIT-(MAXINPUTBIT-i)。
   第(3)空也在求积的二重循环中,它是在语句if(result[j]>9)为真的情况下执行的语句,如果这个条件为真,说明当前需要进位,但到底是进几位,进位后余下的数又应该是多少呢?这就是这个条件判断语句下要完成的任务,从程序中不难看出,对于到底进几位这个问题已经解决,剩下的就是对进位后余数的处理,此空的任务就是求出进位后的余数并存放到数组的当前位置。所以,此空答案为result[j]%=10。
   第(4)空在输出计算结果的函数中,从程序中可以看出,此空在_个循环中,循环的作用是输出计算结果,而计算结果存放在数组中,因此,这个循环是用来输出数组中的所有元素。因此,此空答案为result
第(5)空是在清除计算结果的函数中,函数中只有一个循环,此空就在循环下面,计算结果存放在数组中,要清除计算结果就是把数组清零,那么此空的任务是把数组中的每个元素变成零,因此,此空答案为result=0。
转载请注明原文地址:https://jikaoti.com/ti/gXW7FFFM
0

最新回复(0)