大数字计算器

时间:2016-01-09 05:33:35

标签: c numbers largenumber calc

我必须编写一个计算器,对最大数字为30的数字进行加法或乘法运算。(我可以输入的最大操作数为20)。 这就是我提出的(很长):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void Adding(int Result[31],int temp[30][31],int cnt)
   {
   int remainder,i,j,ResultsA[60]={0};
   for(i=0;i<30;i++)
   {
    for(j=0;j<30;j++)
    {
        ResultsA[j]=(ResultsA[j]+temp[i][j])%10;
        remainder=(ResultsA[j]+temp[i][j])/10;
        ResultsA[j+1] += remainder;
        if(ResultsA[30])
           {
               cnt++;
           }
    }
   }
     for(i=0;i<30;i++)
        {
            Result[i]=ResultsA[i];
        }
    for(i=0;i<30;i++)
    {
      for(j=0;j<30;j++)
      {
          temp[i][j]=0;
      }
    }

 return;
  }


 void Mul(int num,int Results[31],int Num_int[30][31],int cnt)
{
 int remainder=0,i,j,rows,x;
   for(i=0;i<1;i++)
   {
       Results[i]=1;
   }
 int temp[30][31]={0};
 for(rows=0;rows<num;rows++)
 {
     for(i=0;i<30;i++)
       {
        for(j=0;j<30;j++)
        {
            temp[i][i+j]=remainder+(Num_int[rows][j]*Results[i])%10;
            remainder=(Num_int[rows][j]*Results[i])/10;
        }
       }
       Adding(Results,temp,cnt);
 }
    return;
}



 void Plus(int num,int Nums_int[30][31],int Results[31],int cnt)
  {
      int i,j,remainder,len=0;
      for(i=0;i<num;i++)
         {
          for(j=0;j<30;j++)
             {
              Results[j]=(Results[j]+Nums_int[i][j])%10;
              remainder=(Results[j]+Nums_int[i][j])/10;
              Results[j+1]+=remainder;
              if(Results[30])
                 cnt++;
             }
         }
    return;
  }



 void str_to_int(int Nums_int[20][31],char Nums_str[20][31])
 {
  int length[20]={0},i,j;
  for(i=0;i<20;i++)
  {
    for(j=19;0<=j;j--)
    {
      while(Nums_str[i][j]<48||57<Nums_str[i][j])
             length[i]++;
    }
  }
  for(i=0;i<20;i++)
     {
       for(j=0;j<length[i];j++)
       {
         Nums_int[i][length[i]-j]=Nums_str[i][j]-'0';
       }
     }
     return;
  }


  void calcBig(char op, int operands[][31], int numOperands, int result[31],int cnt)
 {
 if (op=='+')
 {
    Plus(numOperands,operands,result,cnt);
 }
 if(op=='*')
  {
   Mul(numOperands,result,operands,cnt);
  }
  return;

 }



 int main()
 {
int i,cnt=0,y;
char x;
char Nums_str[20][31]={0};
int num, Nums_int[30][31]={0};
int Results[31]={0};
printf("select operator:\n");
scanf("%c",&x);
printf("enter number of operands:\n");
scanf("%d",&num);
printf("enter numbers <seperated by new line>:\n");
for(i=0;i<num;i++)
{
 scanf("%s",Nums_str[i]);
}
 str_to_int(Nums_int,Nums_str);
  calcBig(x,Nums_int,num,Results,cnt);
 printf("result:\n");
  if(cnt)
  {
    printf("overflow!");
  }
  else{
    for(i=29;0<=i;i--)
      {
          while(Results==0)
          {
              y++;
          }
      }
      for(i=y;0<=i;i--)
        {
           printf("%d",&Results[i]);
        } 
 }
  return 0;
}

Num_int是包含来自用户的数字的2d数组,num是用户输入的数字的数量。

Mul是在Nums_int中乘以数字的函数。

str_to_int将从用户收到的数字从字符串转换为int并反转该顺序。

Plus是一个在Nums_int中添加数字的功能。

添加是添加数字的函数,这些数字是将数字乘以其他数字的任意数字的结果(它给出了乘以两个数字的结果)。

问题是,当我运行代码时,我得到了这个:

  select the operation:
   */+
  select number of operands:
   num
   enter numbers:
   //entering numbers

并且输入数字后没有任何反应,程序甚至没有结束(没有返回0)。输入数字后根本没有任何反应

0 个答案:

没有答案