c++中两个整型数相乘,要求很大很大的数,超出了取值范围!

来源:百度知道 编辑:UC知道 时间:2024/09/18 07:17:04
这个数具体大到什么样子呢?形象的说,第一个数在小键盘上按上一分钟,第二个数按上两分钟!都知道超出了取值范围会发生溢出!所以请来帮哈忙!
刚接触C++,老师很牛!总给牛的题!因为牛,是因为我们菜,只有C的基础,下面那个哥给的答案,超出我们的能力,希望下位回答的用C写。目前,我也稍有点眉目了,请继续回答。。。

#include <iostream>
#include <string>
using namespace std;

void main()
{
string num1,num2;//被乘数和乘数,考虑到大整数,用string装入
cout<<"please input number1 and number2:"<<endl;
cin>>num1>>num2;
const char *p1=num1.c_str(); //转为char *
const char *p2=num2.c_str();
int length=strlen(p1)+strlen(p2);
char *p=new char [length]; //结果放在字符数组中
int i,j;
for(i=0;i<length;++i)
{
p[i]='0'; //初始化结果数组,开始全为'0',对应数字0
}
p[i]='\0';
int carry=0; //进位初时设为0
for(i=strlen(p1)-1;i>=0;--i)//由于要求小端存储,这里是模拟
{
carry=0;
for(j=strlen(p2)-1;j>=0;--j)
{
carry+=(p1[i]-'0')*(p2[j]-'0')+(p[i+j+1]-'0');
p[i+j+1]=carry%10+'0';
carry/=10;
}
}
cout<<"两数相乘的结果为:";
for(i=0;i<strlen(p);++i)
{
if(p[i]=='0&#