问题 问答题

【说明】 本程序的功能是实现任意两个大整数的乘法运算,例如: 输入整数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[i]=0; two[i]=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[i]!=’\0’) i++; onebit=i; for(i--;i>=0;i--,j--) { if(int(Number[i])>=48&&int(Number[i])<=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[i]!=’\0’) i++; twobit=i; for(i--;i>=0;i--,j--) { if(int(Number[i])>=48&&int(Number[i])<=57) two[j]=int(Number[i]-48); //由字符转换为数字 else return 0; } return 1; } void LargeNumber∷multiplication() //乘法 { clearresult(); int m; for(i=MAXINPUTBIT;i>=0;i--) { temp=two[i]; 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[i]==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[i]-48)。 第(2)空在对大整数求乘积的函数中,是一个循环的初始条件,从程序中不难看出,这个二重循环是用来实现对两个大整数求乘积的,而变量j是用来存放计算结果数组的当前下标的,根据乘法的规则,不难得出此空答案为MAXRESULTBIT-(MAXINPUTBIT-i)。 第(3)空也在求积的二重循环中,它是在语句if(result[j]>9)为真的情况下执行的语句,如果这个条件为真,说明当前需要进位,但到底是进几位,进位后余下的数又应该是多少呢这就是这个条件判断语句下要完成的任务,从程序中不难看出,对于到底进几位这个问题已经解决,剩下的就是对进位后余数的处理,此空的任务就是求出进位后的余数并存放到数组的当前位置。所以,此空答案为result[j]%=10。 第(4)空在输出计算结果的函数中,从程序中可以看出,此空在_个循环中,循环的作用是输出计算结果,而计算结果存放在数组中,因此,这个循环是用来输出数组中的所有元素。因此,此空答案为result[i]。第(5)空是在清除计算结果的函数中,函数中只有一个循环,此空就在循环下面,计算结果存放在数组中,要清除计算结果就是把数组清零,那么此空的任务是把数组中的每个元素变成零,因此,此空答案为result[i]=0。

填空题
单项选择题