我在c中编写了一个用于长数乘法的代码,但输出没有在IDE上显示。请指出给定代码中的错误。哪种语言更有效地解决这些类型的问题?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10000
void main()
{
char ac[MAX];
char bc[MAX];
int a[MAX],b[MAX];
int mul[MAX];
int c[MAX];
int temp[MAX];
int la,lb;
int i,j,k=0,x=0,y;
long int r=0;
long int sum = 0;
la=strlen(ac)-1;
lb=strlen(bc)-1;
printf("Enter the first number : ");
scanf("%s",ac);
printf("Enter the second number : ");
scanf("%s",bc);
for(i=0;i<=la;i++){
a[i] = ac[i] - 48;
}
for(i=0;i<=lb;i++){
b[i] = bc[i] - 48;
}
for(i=lb;i>=0;i--){
r=0;
for(j=la;j>=0;j--){
temp[k++] = (b[i]*a[j] + r)%10;
r = (b[i]*a[j]+r)/10;
}
temp[k++] = r;
x++;
for(y = 0;y<x;y++){
temp[k++] = 0;
}
}
k=0;
r=0;
for(i=0;i<la+lb+2;i++)
{
sum =0;
y=0;
for(j=1;j<=lb+1;j++){
if(i <= la+j){
sum = sum + temp[y+i];
}
y += j + la + 1 ;
}
c[k++] = (sum+r) %10;
r = (sum+r)/10;
}
if (r==1)
{
c[k]=r;
}
j=0;
for(i=k-1;i>=0;i--){
mul[j++]=c[i];
}
for(i=0;i<j;j++)
{
printf("%d",mul[i]);
}
}
答案 0 :(得分:2)
在分配字符串之前计算输入字符串的长度:
la=strlen(ac)-1;
lb=strlen(bc)-1;
printf("Enter the first number : ");
scanf("%s",ac);
printf("Enter the second number : ");
scanf("%s",bc);
如果您改为采用其他方式实际执行此操作:
printf("Enter the first number : ");
scanf("%s",ac);
printf("Enter the second number : ");
scanf("%s",bc);
la=strlen(ac)-1;
lb=strlen(bc)-1;
您的第二个问题出在代码的最后一部分:
for(i=0;i<j;j++)
{
printf("%d",mul[i]);
}
你正在递增j而不是i,它应该是:
for(i=0;i<j;i++)
{
printf("%d",mul[i]);
}
另一件小事,这对于不熟悉的人来说并不是很清楚:
a[i] = ac[i] - 48;
如果你这样写它会更容易理解:
a[i] = ac[i] - '0';
答案 1 :(得分:0)
使用删除那些la和l赋值,并在扫描下面的字符串后放置它。
printf("Enter the first number : ");
scanf("%s",ac);
printf("Enter the second number : ");
scanf("%s",bc);
la=strlen(ac)-1;
lb=strlen(bc)-1;
for(i=0;i<=la;i++){
a[i] = ac[i] - 48;
}
for(i=0;i<=lb;i++){
b[i] = bc[i] - 48;
}
即使在代码的最后部分也存在错误。在您使用的for(i=0;i<j;j++)
循环中,将其替换为for(i=0;i<j;i++)
。
我还建议你将临时数组的大小更改为2 * MAX + 2.因为假设有人输入了8000个数字,那么如果大小仅限于MAX,则temp将无法存储这些数字。
你可以使用java和python语言来做同样的事情。在Java中,有一个名为BigInteger的单独类。
Scanner sc=new Scanner(System.in);
BigInteger b1,b2,b3;
String num1,num2;
System.out.println("Enter the first integer");
num1=sc.next();
System.out.println("Enter the second integer");
num2=sc.next();
b1=new BigInteger(num1);
b2=new BigInteger(num2);
b3=b1.multiply(b2);
System.out.println("The product of "+b1+" and "+b2+" is "+b3);