大数加和问题
以前一直想不通为什么我们痞帅痞帅的java老师为什么不跟我们讲java的知识点,而是不惜用四五周的时间来讲授一些算法知识,现在我有点明白他的意思了。
前面用了java来实现大数加和问题【在这】,感觉很麻烦(解算法题还是我大C语言好用啊!),后面复习时用C语言实现了一遍
此代码的限制
只能先输入一个较大的数,再输入长度小于或等于前一个数的数
C语言代码
#include<stdio.h>
#include<string.h>
#define maxn 1024
void add(char* big,char* small)
{
char temp1[maxn],temp2[maxn],sum[maxn];
int len1 = strlen(big);
int len2 = strlen(small);
//反转入库
int j = 0;
for(int i = len1-1;i>=0;--i)
{
temp1[j++] = big[i];
}
//temp1[j] = '\0';
j = 0;
for(int i = len2-1;i>=0;--i)
{
temp2[j++] = small[i];
}
//补齐small
for(int i = len2;i<len1;i++)
{
temp2[i] = '0';
temp2[len1] = '\0';
}
//按位相加
int aSum;
int overFlow = 0;
int carryBit = 0;
for(int i = 0;i<len1;i++)
{
aSum = temp1[i] - '0' + temp2[i] - '0' + carryBit;//字符减去‘0’得到数字
if(aSum>9)
{
//先判断是否将要overFloat
if(i == (len1-1))
{
overFlow = 1;
}
carryBit = 1;
sum[i] = aSum - 10 + '0';
}else{
sum[i] = aSum + '0';
}
}
//判断是否溢出
if(overFlow == 1)
{
sum[len1++] = carryBit + '0';
}
sum[len1] = '\0';
for(int i = len1-1;i>=0;i--)
putchar(sum[i]);
}
int main()
{
char str1[maxn],str2[maxn];
gets(str1);
gets(str2);
add(str1,str2);
}
结果: