C语言中,如何“利用字符数组实现两个大整数的加法”?

2025-05-23 04:26:30
推荐回答(1个)
回答1:

#include
#include
void f1(char *a,char *b) //一个函数
{
char t[101];
if(strlen(a) {
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 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 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 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\n ");
gets(a1); //输入字符a1
printf("请输入大整数字符b\n ");
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("\n");
}

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