C语言 用字符数组(数组长度为20)表示大整数,完成两个大整数的加、 减法计算

作者&投稿:长孙怀 (若有异议请与网页底部的电邮联系)
大一c语言:用数组设计一个20位长整数,并实现用这个长整数进行加法或减法运算。 急求啊~

//这是我之前写的一个大整数的加减乘的程序,先输入两个数的各位的值#include#include#includevoid putin(int *x,int *y,int a,int b){int i;for(i=0;i0;k--)t[i*(a+b)+k]=t[i*(a+b)+k-1];t[i*(a+b)+0]=0;}jiafa(t+0*(a+b),t+1*(a+b),z,c1,a+b,a+b);for(i=2;i=y[0]?c[0]=0:c[0]=-1;z[0]=(x[0]-y[0]+10)%10;for(i=1,j=1;i=y[j]?c[i]=0:c[i]=-1; z[i]=(x[i]-y[j]+c[i-1]+10)%10;}else if(j==b){z[i]=x[i]+c[j-1];}else z[i]=x[i];}}void print(int *x,int *y,int *z,int a,int b,int c){int i; for(i=0;i=0;i--)printf("%d",x[i]);printf("
");for(i=0;i=0;i--)printf("%d",y[i]);printf("
");for(i=c-1;i>=0;i--)printf("-");printf("
");for(i=c-1;i>=0;i--)printf("%d",z[i]);printf("
");}void main(){int lengtha=5,lengthb=4,i;//printf("输入数组a和b的长度(a的长度大于b的长度):");//scanf("%d%d",&lengtha,&lengthb); int *a=(int *)malloc(lengtha*sizeof(int));int *b=(int *)malloc(lengthb*sizeof(int));int *sum=(int *)malloc((lengtha+1)*sizeof(int));int *c=(int *)malloc((lengtha)*sizeof(int));int *cha=(int *)malloc(lengtha*sizeof(int));int *ji=(int *)malloc((lengtha+lengthb)*sizeof(int));for(i=0;i<lengtha;i++){a[i]=i+2;b[i]=i+2;c[i]=0;}a[lengthb]=9;/*printf("输入%d个数组a的元素:",lengtha);for(i=0;i<lengtha;i++)scanf("%d",&a[i]);printf("输入%d个数组b的元素:",lengthb);for(i=0;i<lengthb;i++)scanf("%d",&b[i]);*/putin(a,b,lengtha,lengthb);jiafa(a,b,sum,c,lengtha,lengthb);printf("加法:
");print(a,b,sum,lengtha,lengthb,lengtha+1);jianfa(a,b,cha,c,lengtha,lengthb);printf("减法:
");print(a,b,cha,lengtha,lengthb,lengtha);chengfa(a,b,ji,c,lengtha,lengthb);printf("乘法:
");print(a,b,ji,lengtha,lengthb,lengtha+lengthb);}

#include
#include
void f1(char *a,char *b) //一个函数
{
char t[101];
if(strlen(a)<strlen(b)) //比较前的准备
{
t[101]=0;
strcpy(t,a); //把a中内容拷贝到字符串t中
strcpy(a,b);
strcpy(b,t); //以上三条实现a与b的交换
}
}
void f(char *t1,char *t)
{
int i,n;
n=strlen(t1); //n是字符串t1的长度
for(i=0;i<n;i++)
t[i]=t1[n-1-i]; //把t1中的内容赋给与它的下标对称的下标t中
t[n]='\0'; //t最后一个位置赋结束字符
}
void f2(char *b,int q,int l)
{
char t[101]; //定义一个字符数组
int i;
for(i=0;i<q-l;i++)
t[i]='0';
t[q-l]='\0';
strcat(b,t); //把t连接到b去除结束字符‘/0’的字符后,保持和字符串a长度一致,便于运算
}
void add(char *a,char *b,char *s,int q)
{
int i;
strcpy(s,a); //把字符串a拷贝到字符串s中
for(i=0;i<q;i++)
if(s[i]+b[i]>105) //判断两个数字的和是否大于十 ,若大于10考虑进位问题
{
s[i]+=(b[i]-58); //大于10进位,s[i]加上进位后的数字,运算后赋给s[i]
s[i+1]++; //s[i+1]进位加1,运算后赋给s[i]
}
else
s[i]+=(b[i]-48); //否则不进位,运算后赋给s[i]
}
void print(char *s)
{
int i,l;
l=strlen(s);
if(s[l-1]>'9'||s[l-1]<'0')
{
printf("1"); //打印1
for(i=l-2;i>=0;i--)
printf("%c",s[i]); //其余的原样输出
}
else
for(i=l-1;i>=0;i--)
printf("%c",s[i]); //直接输出
}

main()
{
char a[101],b[101],a1[101],b1[101],sum[101]={0};
int q,l;
printf("请输入大整数字符a
");
gets(a1); //输入字符a1
printf("请输入大整数字符b
");
gets(b1); //输入字符b1
f1(a1,b1);//调用函数f1
f(a1,a); //调用f
f(b1,b); //调用f
q=strlen(a); //q是字符串a的长度
l=strlen(b); //l是字符串b的长度
f2(b,q,l); //调用f2使a,b长度一致
add(a,b,sum,q); //调用add,运算a,b字符串的结果
printf("a+b=");
print(sum); //调用print函数
printf("
");
}

我只把一些看起来需要注释的都注释了,一些特别简单的基础的·应该不用注释了,实际上只要多看一些代码,这些都是慢慢可以看懂得。

#include <stdio.h>

int main(int argc, char *argv[])
{
    //也可以不用scanf直接初始化"23213623";
    char a1[20] = {0};
    char a2[20] = {0};
    
    //既然是大数就用long long存
    long long b1 = 0;
    long long b2 = 0;
    
    //输入两个数 如果不需要输入就注释掉
    scanf("%s", a1);
    scanf("%s", a2);
    
    //利用sscanf将字符串转换成两个大数
    sscanf(a1, "%lld", &b1);
    sscanf(a2, "%lld", &b2);
    
    printf("%lld
", b1+b2);//打印两数之和
    printf("%lld
", b1-b2);//打印两数之差
    
    return 0;
}



定边县18718363217: C语言中,我定义了一个长度为20的字符数组,但是输入的字符数不到20个,我希望把剩下的地方空出来, -
蔺先鼻渊: 你输入的不到20,在字符串最后是有个字符串结束标记的,结束标记到数组的第19个元素之间就是空着的,你可以用来干干事情,但是不建议这样做

定边县18718363217: c语言求解释,char name[20] -
蔺先鼻渊: 定义一个名为name,长度为20的字符型数组. 中括号是定义数组的格式.里面的数字就是数组的长度..

定边县18718363217: 字符数组char name[20]是不是name一定要20个字符 -
蔺先鼻渊: 不是,char name[20]; 说明字符数组name,20表示数组的长度,有20个元素.赋值时不一定要20个全部都赋值. name[20]元素的范围为name[0]——name[19].还有char name[20]若没有对它进行初始化,编译器会自动将他初始化为随机字符串的形式.要搞清楚数组的长度、字符串长度.例如:char a[10]="abcdei"; 数组长度为10;字符串长度为6;字符串所占内存为7;(因为字符串的话,因为结尾有个\0) C语言不能定义未知长度的数组,更不能给未设定长度的数组赋值.

定边县18718363217: C语言,新建一个有20个元素名为a的字符型数组,要求通过键盘用字符串方式赋值长度不超过 -
蔺先鼻渊: #include<stdio.h> void main() { char a[20]; int i = 0, n = 0; scanf("%s", a); while(a[i] != '\0') { (a[i] - '0' >= 0 && a[i] - '0' <= 9)?n++,i++:i++; } printf("%d", n); }用指针变量的话#include<stdio.h> void main() { char a[20]; char *p; int n = 0; scanf("%s...

定边县18718363217: C语言关于数组元素个数和字符串长度的问题~~~~~~~ -
蔺先鼻渊: 字符串长度是7,\0占据空间但是不算长度. s[]没有20答案一样,p所指字符串长度也是7. 如果是'B''E'I'J'I'N'G'这个样子长度就不确定了,因为没有\0作为结束符,字符串是以\0为结束标志,找不到\0会越界访问,结果未知.数组数据个数=数组长度; 占据内存=sizeof(数组元素类型)*数组长度; 上面那个数组长度为20.

定边县18718363217: C语言中一个问题,我定义了两个长度为20的字符数组,结果我在数组的时候都超过了字符的数组的长度了 -
蔺先鼻渊: C语言是不对数组是否越界进行检查的,这个责任全部推给了编程者,明显的坏处是,一旦造成内存覆盖,发生的问题诡异,且难以捉摸,足以让人抓狂!

定边县18718363217: C语言字符数组 -
蔺先鼻渊: C语言中没有字符串的数据类型,而字符串的处理又非常频繁,为便于字符串的操作,C语言引入字符数组,用于存储字符串内容. 举例: main() {char ch[20];int i;printf("Input:");for(i=0;i<20;i++)scanf("%c",&ch[i]); \\用循环一个个字符...

定边县18718363217: 用C语言编写:输入20个字符,存放在一个字符数组中,然后分别统计其中数字、英文字母和其它字符的个数 -
蔺先鼻渊: #include<stdio.h> int main() { char str[100]; int i=0; int num=0,ch=0,blank=0,other=0;gets(str); while(str[i]!='\0') { if((str[i]>='A' && str[i]<='Z') || (str[i]>='a' && str[i]<='z')) ch++;//字母 else if(str[i]>='0' && str[i]<='9') num++;//数字 else if(str[i]==' ') blank++...

定边县18718363217: c语言,编写程序,定一个大小为20的一维数组,使其元素依次存放偶数2.4... -
蔺先鼻渊: #include int main() { int num[20],i; for(i=0;i { num[i]=(i+1)*2;if(i%5==0&&i) printf("\n"); printf("%d\t",num[i]); } return 0; }

定边县18718363217: 编程序,输入一个长度为20的字符型数组,把数组中重复的元素删去(如出现三个'a'则删去两个a),输出删节后的新数组.
蔺先鼻渊: 其实原理很简单,你想想如果给你一串字符,你会怎么剔除多余的呢? 是不是从第1个字符开始向好找,找到与其相同的字符就删除掉,一直到最后;然后重复从第2个字符再重复. 对于数组,我们无法直接删除该元素,但是我们可以对要删除...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网