我必须编写一个计算器,对最大数字为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)。输入数字后根本没有任何反应