(1) 求解 11111111111111111111111111111111111111111111 与本身的乘积。
//123456789123456789123456789123456789
//#include <bits/stdc++.h> //什么都能用这个头文件
#include <bits/stdc++.h>
using namespace std;
const int MaxSize =1000;//默认数据最大位数再加一后的大小;
int GetWei(int* num)//得到数据位数;
{
for(int i=MaxSize-1;i>=0;i--)
{
if(num[i]!=0)
return i+1;
}
return 0;
}
void Clear(int*num) //重置数组;
{
for(int i=0;i<GetWei(num);i++)
{
num[i]=0;
}
}
void JinWei(int*num)//进位;
{
for(int k=0;k<GetWei(num);k++)
{
//满十进一;
if(num[k]>=10)
{
num[k+1]+=num[k]/10;
num[k]%=10;
}
}
}
void Debug(int*data) //调试;
{
for(int i=0;i<GetWei(data);i++)
{
cout<<data[i];
}
cout<<endl;
}
int main()
{
string str1;//数据1
string str2;//数据2;
//数据数组;
int num1[MaxSize]={0} ;
int num2[MaxSize]={0} ;
int result1[MaxSize]={0} ;
int result2[MaxSize]={0} ;
//输入;
getline(cin,str1);
getline(cin,str2);
//反转;
reverse(str1.begin(),str1.end());
reverse(str2.begin(),str2.end());
//字符串转整形数组;
for(int i=0;i<str1.length();i++)
{
num1[i]=str1[i]-'0';
}
for(int i=0;i<str2.length();i++)
{
num2[i]=str2[i]-'0';
}
//调试
cout<<endl<<"数据1为:"<<endl;
Debug(num1);
cout<<endl<<"数据2为:"<<endl;
Debug(num2);
//乘法运算;
for(int i=0;i<GetWei(num1);i++)
{
//一位,乘多位;
for(int j=0,z=i;j<GetWei(num2);j++,z++)
{
result1[z]=num1[i]*num2[j];
}
//调试
cout<<endl<<"第"<<i+1<<"次乘法结果为:"<<endl;
Debug(result1);
//进位:满十进一;
JinWei(result1);
//调试
cout<<endl<<"第"<<i+1<<"一次乘法进位后结果为:"<<endl;
Debug(result1);
//每次结果错位相加;
for(int m=0;m<GetWei(result1);m++)
{
result2[m]+=result1[m];
}
//重置result1;
Clear(result1);
//进位;
JinWei(result2) ;
//调试
cout<<endl<<"第"<<i+1<<"一次错位相加后的结果为:"<<endl;
Debug(result2);
}
//输出运算结果;
cout<<endl<<"最终结果为:";
for(int i=GetWei(result2)-1;i>=0;i--)
{
cout<<result2[i];
}
return 0;
}
(一)输入数据:
(2)运行代码: