大数相乘 数组模拟
直接上代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
getchar();
while(n--){
char s1[1005],s2[1005],s3[1005];
memset(s3,0,sizeof(s3));
int len=0;
cin>>s1>>s2;
int len1=strlen(s1),len2=strlen(s2);
for(int i=len1-1;i>=0;i--){
int yu=0;
for(int j=len2-1;j>=0;j--){
s3[len++]+=((s1[i]-'0')*(s2[j]-'0'))%10+yu;
yu=((s1[i]-'0')*(s2[j]-'0'))/10;
}
}
for(int i=len-1;i>=0;i--) cout<<s3[i];
cout<<endl;
}
}
大数加法
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define Xiaobo main
using namespace std;
void change(char s[],int num[])
{
int i=0,j=0,len=strlen(s);
for(i=len-1;i>=0;i--)
num[j++]=s[i]-'0';
}
int Xiaobo()
{
int n;
char s1[1005],s2[1005];
int num1[1006]={0},num2[1006]={0};
cin>>n;
int cnt=0,b=n;
while(n--){
scanf("%s %s",s1,s2);
change(s1,num1);
change(s2,num2);
for(int i=0;i<strlen(s1)||i<strlen(s2);i++)
{
num1[i]=num1[i]+num2[i];
if(num1[i]>9){
num1[i+1]++;
num1[i]-=10;
}
}
printf("Case %d:\n",++cnt);
int len=strlen(s1)>strlen(s2)?strlen(s1):strlen(s2);
printf("%s + %s = ",s1,s2);
if(num1[len]){
for(int i=len;i>=0;i--)
printf("%d",num1[i]);
}
else {
for(int i=len-1;i>=0;i--)
printf("%d",num1[i]);
}
if(cnt<b) cout<<endl;
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
}
return 0;
}