yizhiyouling @ 2023-12-01 20:58:45
60分,不知道问题出哪了,自己运不过的检查点答案是一样的,大佬们帮忙看看哪有问题。
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char a[2100],b[2100]/*计算数*/,c[2100],d[2100]/*输入储存*/;
int result[4200],list[4200];//储存结果
void change(char a[],char b[],int n) //倒置函数
{
for(int i=0;i<n;++i)
b[i]=a[n-1-i];
return;
}
void change(int a[],int b[],int n) //倒置函数
{
for(int i=0;i<n;++i)
b[i]=a[n-1-i];
return;
}
void myPrint(char a[],int n) //char类型数组输出 ,方便调试
{
for(int i=0;i<n;++i)
cout<<a[i];
return;
}
void myPrint(int a[],int n) //int类型数组输出 ,方便调试
{
for(int i=0;i<n;++i)
cout<<a[i];
return;
}
int main()
{
int m,n,Max; //记录数位
int num,sign; //记录单个数位上的计算结果以及进位信息
cin>>c;
cin>>d;
if(c[0]=='0'||d[0]=='0'){
cout<<"0";
return 0;
}
m=strlen(c); //计算长度
n=strlen(d);
Max=m+n;
memset(result,0,sizeof(result)); //初始化计算结果
memset(a,'0',sizeof(a)); //初始化计算数组
memset(b,'0',sizeof(b));
change(c,a,m); //倒置
change(d,b,n);
for(int i=0;i<n;++i){
sign=0; //每次下一数位运算时重置进位信息
for(int j=0;j<m;++j){
num=(int)(b[i]-'0')*(int)(a[j]-'0')+sign;
if(num>9){
sign=num/10;
num%=10;
}
else
sign=0;
list[i+j]+=num;
if(list[i+j]>9){
sign+=list[i+j]/10;
list[i+j]%=10;
}
}
if(i==n-1&&sign!=0){
while(sign){
num=sign%10;
list[Max-1]=num;
sign/=10;
Max++;
}
}
}
change(list,result,Max-1);
myPrint(result,Max-1);
return 0;
}
by cute_overmind @ 2023-12-01 21:07:57
#include<bits/stdc++.h>
using namespace std;
int a[5005] = {-1};
int main()
{
int lenn , lenm;
string n , m;
cin >> n >> m;
lenn = n.size();
lenm = m.size();
for(int i = lenn - 1;i >- 1;i--)
{
for(int j = lenm - 1;j >- 1;j--)
{
int a1 = n[i] - '0' + 0;
int a2 = m[j] - '0' + 0;
int ji = a1 * a2;
if(a[lenm + lenn - i - j - 1] == -1)
a[lenm + lenn - i - j - 1] = ji;
else
a[lenm + lenn - i - j - 1] += ji;
}
}
for(int i = 1;i <= 5000;i++)
{
if(a[i] == -1)
break;
if(a[i] >= 9)
{
if(a[i + 1] == -1)
a[i+1]=a[i] / 10;
else
a[i + 1] += a[i] / 10;
a[i] %= 10;
}
}
bool flag = true;
for(int j = 5000;j >= 1;j--)
{
if(a[j] == 0)
a[j] =- 1;
else
break;
}
for(int i = 5000;i >= 1;i--)
{
if(a[i] != -1)
{
cout<<a[i];
flag = false;
}
}
if(flag)
cout << 0;
return 0;
}
本蒟蒻的方法 看看合不合大佬的眼