系列文章目录
1、超长整数加法
从键盘输入两个超长整数,输出这两个数的和。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *ladd(char *s1, char *s2){
int n1, n2, n, i;
char *result, c = 0;
n1 = strlen(s1); //数字串s1的长度
n2 = strlen(s2); //数字串s2的长度
n = n1 > n2?n1:n2; //数字串s1,s2最大长度
result = (char*)malloc(n + 2); //申请存结果串的内存
for(i = n + 1; i >= 0; i--) //将s1从低位开始搬到result,没有数字的位以及最高位填'0'
result[i] = i > n - n1?s1[i-n+n1-1]:'0';
for( i = n; i >= 0; i--)
{
char tchar;
tchar = i > n- n2?result[i]-'0'+s2[i - n + n2 - 1] - '0' +c:result[i] - '0' + c; //将数字字符变为数
c = tchar > 9?1:0; //设进位
result[i] = tchar % 10 + '0';
}
return result;
}
int main(){
char num1[100], num2[100], *num;
scanf("%s %s", num1, num2);
num = ladd(num1, num2);
printf("%s+%s=%s\n", num1, num2, num);
free(num);
return 0;
}
—————————————————————————————————
success
2.一维数组实现杨辉三角
#define LASTROW 10
int main(){
int row, col a[11];
a[1] = 1;
printf("%4d\n", a[1]);
for(row = 2; row <= LASTROW; row++)
{
a[row] = 1;
for( col = row - 1; col >= 2; col--)
a[col] = a[col] + a[col - 1];
for(col = 1; col <= row; col++)
printf("%4d", a[col]);
printf("\n");
}