之前在数据结构这门课程中有一个大数相乘的课程设计,当时并不是很明白进位的实现。然后前几天参加的一个校赛又出现了大数相加的题目,因此对进位有了一定的浅薄认知。记下来以便回忆。
大数相加题目要求输入仅一行,故我用到了字符串的分割,但是我并未查到VC自带的分割函数,所以我自己写了一个简单的用于分割的代码。由于中间以空格区别前后两个大数,所以可以此作为区别的条件。代码如下:
len=strlen(c);
while(c[i]!=' ') i++;
for(j=0;j<i;j++) a[j]=c[j];
for(j=i+1,k=0;j<len;j++,k++) b[k]=c[j];
完整的大数相加代码如下(我是用CodeBlocks写的代码):
#include<stdio.h>
#include<string.h>
char a[1005],b[1005],c[1005];//获取 数字字符串
int a1[1005]={0},b1[1005]={0},s[1005]={0};//将数字字符串转换为数字数组
int main()
{
int i=0,j,k;
int len,len1,len2,len3;
gets(c);
len=strlen(c);
while(c[i]!=' ') i++;//分割出前后两个数
for(j=0;j<i;j++) a[j]=c[j];//第一个数赋值给数组
for(j=i+1,k=0;j<len;j++,k++) b[k]=c[j];//第二个数赋值给b数组
len1=strlen(a);
len2=strlen(b);//分别求出a和b数组的长度
if(len1>=len2)
{
k=len1;
for(i=len2;i<len1;i++) b[i]='0';
}
else
{
k=len2;
for(i=len1;i<len2;i++) a[i]='0';
}
for(i=0;i<k;i++)
{
a1[i]=a[i]-'0';
b1[i]=b[i]-'0';//将字符串转换为数字
s[i]=a1[i]+b1[i];
}
for(i=0;i<k;i++)//解决进位问题
if(s[i]>=10)
{
s[i]=s[i]-10;
s[i+1]+=1;
}
for(i=k;i>=0;i--)//倒序输出
if(s[i]!=0)
printf("%d",s[i]);
printf("\n");
return 0;
}