#include
int main(){
int n,m,k;
k=0;
scanf("%d",&n);
char a[n];scanf("%s",a);
scanf("%d",&m);
char b[m];scanf("%s",b);
int c[100]={0};
for(int i=0;i2;i++){
int k=a[i];
a[i]=a[n-1-i];
a[n-1-i]=k;
}
for(int i=0;i2;i++){
int k=b[i];
b[i]=b[m-1-i];
b[m-1-i]=k;
}
for(int i=0;i0;t1]+=((c[i+t]+(a[i]-'0')*(b[t]-'0'))/10);
c[i+t]=(c[i+t]+(a[i]-'0')*(b[t]-'0'))%10;
}
int e=n+m;
if(c[n+m-1]!=0)e=e+1;
char f[e];
for(int i=0;i-1;i++){
f[i]=c[e-i-2]+'0';
}
printf("%s",f);
return 0;
}
修改如下,供参考:
#include <stdio.h>
#define N 21
int main()
{
int i,j, n,m,k,c[100]={0};
char a[N],b[N],f[N+N];
k=0;
scanf("%d",&n);
scanf("%s",a);
scanf("%d",&m);
scanf("%s",b);
for(i=0;i < n / 2;i++){//修改
k=a[i];
a[i]=a[n-1-i];
a[n-1-i]=k;
}
for(i=0;i < m / 2;i++){//修改
k=b[i];
b[i]=b[m-1-i];
b[m-1-i]=k;
}
for(i=0;i < n;i++)
{
for(j=0;j < m;j++)
{
c[i+j] += (a[i]-'0')*(b[j]-'0');
if(c[i+j] >= 10) //进位处理
{
c[i+j+1] += c[i+j] / 10;
c[i+j] %= 10;
}
}
}
//t=((c[i+t]+(a[i]-'0')*(b[t]-'0'))/10);
//c[i+t]=(c[i+t]+(a[i]-'0')*(b[t]-'0'))%10;
//}
int e=n+m;
if(c[e-1]==0) e=e-1;//修改 if(c[n+m-1]!=0)e=e+1;
for(i=0;i<e;i++){
f[i] = c[e-i-1]+'0';
}
f[i] = '\0'; //修改
printf("%s",f);
return 0;
}
char字符不能直接转int,前两个for循环的临时变量应该用char类型。下面的代码太乱了,你也没考虑进位。代码修改了一下,运行结果如下:
代码:
#include <stdio.h>
int main(){
int n,m,k;
char a[22]={0},b[22]={0};
k=0;
scanf("%d",&n);
scanf("%s",a);
scanf("%d",&m);
scanf("%s",b);
int c[100]={0};
for(int i=0;i<n/2;i++){
char k=a[i];
a[i]=a[n-1-i];
a[n-1-i]=k;
}
for(int i=0;i<m/2;i++){
char k=b[i];
b[i]=b[m-1-i];
b[m-1-i]=k;
}
int shift = 0;
for(int i = 0;i<m;i++) //b
{
shift = 0;
int t = 0;
for(;t<n;t++) //a
{
c[i+t] = c[i+t] + (b[i]-'0')*(a[t]-'0') + shift;
shift = c[i+t]/10;
c[i+t] = c[i+t]%10;
}
if(shift != 0)
{
c[i+t] = shift;
}
}
int i = 99;
while(c[i]==0)
i--;
for(;i>=0;i--)
printf("%d",c[i]);
return 0;
}