这个乘以两个数的代码有什么问题?

时间:2015-01-24 11:02:23

标签: c multiplication

我尝试将第一个数字存储在一个数组中,然后将该数字的每个数字与第二个数字相乘,并将该数据单独存储在临时变量中。

#include<stdio.h>
int main()
{
    int i=0,j=0,b,temp,a,count=0,arr[1000];
    scanf("%d",&a);
    scanf("%d",&b);
    while(a!=0)
    {
        arr[++i]=a%10;
        a=a/10;
        count++;
    }
    temp=0;
    for(j=0;j<count;j++)
    {
        temp=arr[j]*b+temp;
        arr[j]=temp%10;
        temp=temp/10;
    }

    while(temp>0)
    {
        arr[++j]=temp%10;
        count++;
        temp=temp/10;
    }
    for(i=count;i>0;i++)
    printf("%d",arr[i]);
return 0;
}

3 个答案:

答案 0 :(得分:2)

通过使用表达式arr[++i],您首先递增i,然后然后设置数组的值。因此,arr[0]的值未定义。

答案 1 :(得分:1)

有很多问题:

  • arr[++i]=a%10;表示如果i为0且a为11,则在索引1处存储1而不是0.因此,您应该使用arr[i++]=a%10; post increment operator。
  • for(i=count;i>0;i++)表示你首先将count表示为4,检查i大于0并继续递增(并且每个循环都满足条件)导致无限循环。您应该将i值减小为for(i=count-1;i>=0;i--)并迭代直到数组索引为0.

答案 2 :(得分:0)

改变你的上一次循环。

for(i=count;i>0;i++)
    printf("%d",arr[i]);

for(i=count-1;i>=0;i--)
    printf("%d",arr[i]);

放 循环中i=count-1,因为在while(temp>0){}的最后一次迭代中,您将值设置为count(lengthOfArray + 1),并且在最后一次for循环中忽略它。并且还放置i>=0因为您没有打印第0个位置值。还有i--

DEMO