C语言 利用字符数组实现两个大整数的加法 添加注释
一个利用字符数组实现两个大整数的加法的程序,求高手帮忙加一下注释语句啊!!!就是在每句代码后边帮我解释下他是干嘛的。下面的这个程序,对我有点难度读起来不是很顺畅。。。不胜...
一个利用字符数组实现两个大整数的加法的程序,求高手帮忙加一下注释语句啊!!!就是在每句代码后边帮我解释下他是干嘛的。下面的这个程序,对我有点难度读起来不是很顺畅。。。不胜感激!!!
/*请编制程序实现功能:利用字符数组实现两个大整数的加法。*/
#include <string.h>
#include <stdio.h>
void f1(char *a,char *b)
{
char t[101];
if(strlen(a)<strlen(b)) //比较前的准备
{
t[101]=0;
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
}
void f(char *t1,char *t)
{
int i,n;
n=strlen(t1);
for(i=0;i<n;i++)
t[i]=t1[n-1-i];
t[n]='\0';
}
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);
}
void add(char *a,char *b,char *s,int q)
{
int i;
strcpy(s,a);
for(i=0;i<q;i++)
if(s[i]+b[i]>105) //判断两个数字的和是否大于十 ,若大于10考虑进位问题
{
s[i]+=(b[i]-58);
s[i+1]++;
}
else
s[i]+=(b[i]-48);
}
void print(char *s)
{
int i,l;
l=strlen(s);
if(s[l-1]>'9'||s[l-1]<'0')
{
printf("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);
printf("请输入大整数字符b\n ");
gets(b1);
f1(a1,b1);
f(a1,a);
f(b1,b);
q=strlen(a);
l=strlen(b);
f2(b,q,l);
add(a,b,sum,q);
printf("a+b=");
print(sum);
printf("\n");
} 展开
/*请编制程序实现功能:利用字符数组实现两个大整数的加法。*/
#include <string.h>
#include <stdio.h>
void f1(char *a,char *b)
{
char t[101];
if(strlen(a)<strlen(b)) //比较前的准备
{
t[101]=0;
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
}
void f(char *t1,char *t)
{
int i,n;
n=strlen(t1);
for(i=0;i<n;i++)
t[i]=t1[n-1-i];
t[n]='\0';
}
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);
}
void add(char *a,char *b,char *s,int q)
{
int i;
strcpy(s,a);
for(i=0;i<q;i++)
if(s[i]+b[i]>105) //判断两个数字的和是否大于十 ,若大于10考虑进位问题
{
s[i]+=(b[i]-58);
s[i+1]++;
}
else
s[i]+=(b[i]-48);
}
void print(char *s)
{
int i,l;
l=strlen(s);
if(s[l-1]>'9'||s[l-1]<'0')
{
printf("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);
printf("请输入大整数字符b\n ");
gets(b1);
f1(a1,b1);
f(a1,a);
f(b1,b);
q=strlen(a);
l=strlen(b);
f2(b,q,l);
add(a,b,sum,q);
printf("a+b=");
print(sum);
printf("\n");
} 展开
1个回答
展开全部
#include <string.h>
#include <stdio.h>
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\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");
}
我只把一些看起来需要注释的都注释了,一些特别简单的基础的·应该不用注释了,实际上只要多看一些代码,这些都是慢慢可以看懂得。
#include <stdio.h>
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\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");
}
我只把一些看起来需要注释的都注释了,一些特别简单的基础的·应该不用注释了,实际上只要多看一些代码,这些都是慢慢可以看懂得。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询