c语言 数组间相加和相减应该怎么编,用下面的最后两个方程 求大神相助
按元素位置 对应相加减就可以了
比如
int i,j;
for(i = 0; i row; i ++)
for(j = 0; j col; j ++)
c[i][j] = a[i][j] + b[i][j];
不过 看你下面函数的参数 都转成一维数组了 就更简单了
只要
int j;
for(j = 0; j col; j ++)
c[j] = a[j] + b[j];
这样就ok了
减法类似
C语言数组运算问题:数组进行加减法怎样计算啊?请以以下程序为例讲解,谢谢
#include stdio.h
int main()
{
char a[15]={“windows98”};
printf(“%s\n”,a+7); // a+7相当于a[7],也就是从a的首地址偏移7个位置,结果是:98
return 0;
}
求问个c语言问题,怎样数组模拟减法运算
/*大数减法*/
c=a-b;
void subtract(char* a,char* b,char* c)
{
int i,j,ca,cb;
ca=strlen(a);
cb=strlen(b);
if (cacb||(ca==cbstrcmp(a,b)=0))
{
for (i=ca-1,j=cb-1;j=0;i–,j–)
a[i]-=(b[j]-‘0’);
for (i=ca-1;i=0;i–)
if (a[i]’0′)
{
a[i]+=10;
a[i-1]–;
}
i=0;
while (a[i]==’0′)
i++;
if (a[i]==’\0′)
{
c[0]=’0′;
c[1]=’\0′;
}
else
{
for (j=0;a[i]!=’\0′;i++,j++)
c[j]=a[i];
c[j]=’\0′;
}
}
else
{
for (i=ca-1,j=cb-1;i=0;i–,j–)
b[j]-=(a[i]-‘0’);
for (j=cb-1;j=0;j–)
if (b[j]’0′)
{
b[j]+=10;
b[j-1]–;
}
j=0;
while (b[j]==’0′)
j++;
i=1;
c[0]=’-‘;
for (;b[j]!=’\0′;i++,j++)
c[i]=b[j];
c[i]=’\0′;
}
}
用c语言数组计算两个数的四则运算,考虑两个数非常大的情况
假设A
100位、B
100位分别存到数组m、n中。(位数不一样时,小的数补零填充)
1、加法时,从低位按位相加、进位
2、减法时,重高位开始比较大小,然后从低位开始按位减、借位
3、乘法时,低位按位乘、进位
4、除法时,用模运算求整数商,小数部分折半减,逐步精确
附:直接点的方法也可以先转化成二进制、然后用补码运算
用c语言 数组 做大数 加减乘除 急
参考代码:
#include stdio.h
#define MAXINT 1000
int compare(int a[],int b[]);
int bigplus(int a[],int b[],int c[]);
int bigsub(int a[],int b[],int c[]);
int bigmult(int a[],unsigned int b,int c[]);
int bigmult2(int a[],int b[],int c[]);
int bigdiv(int a[],unsigned int b,int c[],int *d);
int bigdiv2(int a[],int b[],int c[],int d[]);
int main(int argc, char *argv[])
{
int a[MAXINT]={10,5,4,6,5,4,3,2,1,1,1}; //被乘数或被除数
int b[MAXINT]={7,7,6,5,4,3,2,1}; //乘数或除数
int c[MAXINT],d[MAXINT]; //c[]存放商,d[]存放余数
int div=1234; //小乘数或小除数
int k=0;
int *res=k; //小余数整数指针
bigplus(a,b,c);
bigsub(a,b,c);
bigmult2(a,b,c);
bigdiv2(a,b,c,d);
getchar();
return 0;
}
int bigplus(int a[],int b[],int c[]) //大整数加法
{
int i,len;
len=(a[0]b[0]?a[0]:b[0]); //a[0] b[0]保存数组长度,len为较长的一个
for(i=0;iMAXINT;i++) //将数组清0
c[i]=0;
for (i=1;i=len;i++) //计算每一位的值
{
c[i]+=(a[i]+b[i]);
if (c[i]=10)
{
c[i]-=10; //大于10的取个位
c[i+1]++; //高位加1
}
}
if (c[i+1]0) len++;
c[0]=len; //c[0]保存结果数组实际长度
printf(“Big integers add: “;
for (i=len;i=1;i–)
printf(“%d”,c[i]); //打印结果
printf(“\n”;
return 0;
}
int bigsub(int a[],int b[],int c[]) //大整数减法
{
int i,len;
len=(a[0]b[0]?a[0]:b[0]); //a[0]保存数字长度,len为较长的一个
for(i=0;iMAXINT;i++) //将数组清0
c[i]=0;
if (compare(a,b)==0) //比较a,b大小
{
printf(“Result:0”;
return 0;
}
else if (compare(a,b)0)
for (i=1;i=len;i++) //计算每一位的值
{
c[i]+=(a[i]-b[i]);
if (c[i]0)
{
c[i]+=10; //小于0的原位加10
c[i+1]–; //高位减1
}
}
else
for (i=1;i=len;i++) //计算每一位的值
{
c[i]+=(b[i]-a[i]);
if (c[i]0)
{
c[i]+=10; //小于0原位加10
c[i+1]–; //高位减1
}
}
while (len1 c[len]==0) //去掉高位的0
len–;
c[0]=len;
printf(“Big integers sub= “;
if (a[0]b[0]) printf(“-“;
for(i=len;i=1;i–) //打印结果
printf(“%d”,c[i]);
printf(“\n”;
return 0;
}
int bigmult2(int a[],int b[],int c[]) //高精度乘以高精度
{
int i,j,len;
for (i=0;iMAXINT;i++) //数组清0
c[i]=0;
for (i=1;i=a[0];i++) //被乘数循环
for (j=1;j=b[0];j++) //乘数循环
{
c[i+j-1]+=a[i]*b[j]; //将每一位计算累加
c[i+j]+=c[i+j-1]/10; //将每一次结果累加到高一位
c[i+j-1]%=10; //计算每一次的个位
}
len=a[0]+b[0]; //取最大长度
while (len1 c[len]==0) //去掉高位0
len–;
c[0]=len;
printf(“Big integers multi: “;
for (i=len;i=1;i–) //打印结果
printf(“%d”,c[i]);
printf(“\n”;
}
int bigdiv2(int a[],int b[],int c[],int d[]) //高精度除以高精度
{
int i,j,len;
if (compare(a,b)0) //被除数较小直接打印结果
{
printf(“Result:0”;
printf(“Arithmetic compliment:”;
for (i=a[0];i=1;i–) printf(“%d”,a[i]);
printf(“\n”;
return -1;
}
for (i=0;iMAXINT;i++) //商和余数清0
{
c[i]=0;
d[i]=0;
}
len=a[0];d[0]=0;
for (i=len;i=1;i–) //逐位相除
{
for (j=d[0];j=1;j–)
d[j+1]=d[j];
d[1]=a[i]; //高位*10+各位
d[0]++; //数组d长度增1
while (compare(d,b)=0) //比较d,b大小
{
for (j=1;j=d[0];j++) //做减法d-b
{
d[j]-=b[j];
if (d[j]0)
{
d[j]+=10;
d[j+1]–;
}
}
while (j0 d[j]==0) //去掉高位0
j–;
d[0]=j;
c[i]++; //商所在位值加1
}
}
j=b[0];
while (c[j]==0 j0) j–; //求商数组c长度
c[0]=j;
printf(“Big integers div result: “;
for (i=c[0];i=1;i–) //打印商
printf(“%d”,c[i]);
printf(“\tArithmetic compliment: “; //打印余数
for (i=d[0];i=1;i–)
printf(“%d”,d[i]);
printf(“\n”);
}
C语言数组里的元素怎么加减乘除
加法:
voidAdd(char s1[],char s2[])//参数为两个字符串数组{ int num1[M],num2[M]; int i,j; len1 = strlen (s1); len2 = strlen (s2); for (i = len1-1,j = 0; i = 0; i–)//num1[0]保存的是低位 num1[j++]= s1[i] – ‘0’; for (i = len2-1,j = 0; i = 0; i –) num2[j++] = s2[i] – ‘0’; for (i = 0; i M; i ++) { num1[i] += num2[i]; if (num1[i] 9) { num1[i] -= 10; num1[i+1] ++; } } for(i = M-1; (i = 0)(num1[i] == 0); i –) ;//找到第一个不是 0的数的位置 if (i= 0) //从高位到低位输出每个数 for(; i = 0; i –) printf (“%d”,num1[i]); else printf (“0\n”);}
减法等于加上负的数
乘法
voidMulti(char str1[],char str2[]){ int len1,len2,i,j; int a[MAX+10],b[MAX+10],c[MAX*2+10]; memset (a,0,sizeof(a)); memset (b,0,sizeof(b)); memset (c,0,sizeof(c)); len1=strlen(str1); for(j=0,i=len1-1; i=0; i–)//把数字倒过来 a[j++]=str1[i]-‘0’; len2=strlen(str2); for(j=0,i=len2-1; i=0; i–)//倒转第二个整数 b[j++]=str2[i]-‘0’; for(i=0; ilen2; i++)//用第二个数乘以第一个数,每次一位 for(j=0;jlen1; j++) c[i+j]+= b[i]*a[j]; //先乘起来,后面统一进位for(i=0;iMAX*2; i++)//循环统一处理进位问题 if(c[i]=10) { c[i+1]+=c[i]/10; c[i]%=10; } for(i=MAX*2; (c[i]==0)(i=0);i–);//跳过高位的0 if(i=0) for(; i=0; i–) printf(“%d”, c[i]); else printf(“0”); pritnf(“\n”);} 除法最难 看这里吧(你们竟然会布置除法! 一般都是到乘法)