//计算正整数加法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 2000 //最大位数2000
void CharToInt(const char *str, int* array) { //将字串逆序保存到整型数组中
int i;
int len = strlen(str);
for (i = 0; i < len; i++) //逆序保存
array[i] = str[len-i-1] - '0';
}
void Result(int* array, int len) { //打印结果
int i;
printf("result is:");
for (i = len-1; i>=0; i--)
printf("%d", array[i]);
printf("\n------\n");
}
void Test(int* array, int len) { //测试函数
int i;
for (i = 0; i < len; i++)
printf("%d", array[i]);
printf("\n");
}
int Add(int *array1, int *array2, int len) { //返回结果位数
int i;
for (i = len-1; i>= 0; i--) //整型加和
array1[i] += array2[i];
for (i = 0 ; i < len-1; i++) {
if (array1[i] >= 10) {
array1[i+1]++; //进位
array1[i] -= 10; //减掉低位值
}
}
//Test(array1, len);
while (array1[len-1]==0 && len > 1) //去除前面的0,如果结果为0,至少保存一位0
len--;
return (len);
}
int
main (void)
{
char n1[MAXLINE]; //以字串存储
char n2[MAXLINE];
int *array1 = NULL; //需要转换为整型数组
int *array2 = NULL;
int len;
printf("Input big number 1:");
scanf("%s", n1);
printf("Input big number 2:");
scanf("%s", n2);
len = (strlen(n1) >= strlen(n2))?strlen(n1):strlen(n2); //取加数较长位
len++; //长度加一,以保存可能的进位
array1 = (int*)calloc(len, sizeof(int)); //申请内存并初始化
array2 = (int*)calloc(len, sizeof(int));
CharToInt(n1, array1);
CharToInt(n2, array2);
len = Add(array1, array2, len);
Result(array1, len);
free(array1); //释放内存
free(array2);
array1 = NULL; //赋空值
array2 = NULL;
exit(0);
}
http://219.224.30.70/bnuoj/status.php?showpid=4119
//计算正整数加法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 2000 //最大位数2000
void CharToInt(const char *str, int* array) { //将字串逆序保存到整型数组中
int i;
int len = strlen(str);
for (i = 0; i < len; i++) //逆序保存
array[i] = str[len-i-1] - '0';
}
void Result(int* array, int len) { //打印结果
int i;
for (i = len-1; i>=0; i--)
printf("%d", array[i]);
printf("\n");
}
void Test(int* array, int len) { //测试函数
int i;
for (i = 0; i < len; i++)
printf("%d", array[i]);
printf("\n");
}
int Add(int *array1, int *array2, int len) { //返回结果位数
int i;
for (i = len-1; i>= 0; i--) //整型加和
array1[i] += array2[i];
for (i = 0 ; i < len-1; i++) {
if (array1[i] >= 10) {
array1[i+1]++; //进位
array1[i] -= 10; //减掉低位值
}
}
//Test(array1, len);
while (array1[len-1]==0 && len > 1) //去除前面的0,如果结果为0,至少保存一位0
len--;
return (len);
}
int
main (void)
{
char n1[MAXLINE]; //以字串存储
char n2[MAXLINE];
int *array1 = NULL; //需要转换为整型数组
int *array2 = NULL;
int len;
while (scanf("%s %s",n1,n2)!=EOF)
{
len = (strlen(n1) >= strlen(n2))?strlen(n1):strlen(n2); //取加数较长位
len++; //长度加一,以保存可能的进位
array1 = (int*)calloc(len, sizeof(int)); //申请内存并初始化
array2 = (int*)calloc(len, sizeof(int));
CharToInt(n1, array1);
CharToInt(n2, array2);
len = Add(array1, array2, len);
Result(array1, len);
free(array1); //释放内存
free(array2);
array1 = NULL; //赋空值
array2 = NULL;
}
exit(0);
}