用C语言编程:1000位以内的正整数的加法运算

发布网友

我来回答

3个回答

热心网友

声明两个能容纳1000位十进制数的char型数组存储输入数字字符串,以长的做被加数和结果,短的长度控制加法循环次数。在加法过程中判断和处理进位。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
int main(void){
    char a[1002]={'0'},b[1002]={'0'},*pl=a,*ps=b;
    int i,j,la,lb;
    while(1){//保证输入是正确的        
        printf("Input a & b(length<=1000)...\n");
        scanf("%[12345670] %[12345670]",a+1,b+1);//最前面留1位做进位
        if((la=strlen(a))<1002 && (lb=strlen(b))<1002)
            break;
        printf("Error, redo: ");
    }
    if(la<lb){//找出长的做被加数和结果
        ps=a,pl=b;
        j=la,la=lb,lb=j;
    }
    for(i=lb-1,j=la-1;i>0;i--,j--)//从末位向前对应加
        if((pl[j]+=ps[i]-'0')>'9')//某位>'9'则处理进位
            pl[j]-=10,pl[j-1]++;
    for(;j>0;j--)//若被加数有进位则继续做完
        if(pl[j]>'9')
            pl[j]-=10,pl[j-1]++;
    printf("The result is %s\n",pl[0]=='1' ? pl : pl+1);//有进位则第0位输出
    return 0;
}

热心网友

1000位的大数字计算还说是初学者……您别逗我……

网页不好排版,将就着看吧


#include <stdio.h>
int main() {
char addend1[1001] = {0};
char addend2[1001] = {0};
char result[1001] = {0};
int length1, length2, resultLength;
int carryOver = 0;
int i, mark;
scanf("%s", &addend1);
scanf("%s", &addend2);
for (length1 = 0; addend1[length1]; length1++);
length1--;
for (length2 = 0; addend2[length2]; length2++);
length2--;
resultLength = length1 > length2 ? length1 : length2;
for (i = 0; i <= resultLength; i++) {
if ((i <= length1) && (i <= length2)) {
result[resultLength - i] = addend1[length1 - i] - '0' + addend2[length2 - i] + carryOver;
if (result[resultLength - i] > '9') {
carryOver = 1;
result[resultLength - i]  -= 10;
} else {
carryOver = 0;
}
} else {
break;
}
}
mark = i;
if (i <= length1) {
while (i <= length1) {
result[resultLength - i]  = addend1[length1 - i];
i++;
}
}
if (i <= length2) {
while (i <= length2) {
        result[resultLength - i]  = addend2[length2 - i];
        i++;
    }
}
for (i = mark; carryOver; i++) {
result[resultLength - i] += 1;
if (result[resultLength - i] > '9') {
result[resultLength - i]  -= 10;
} else {
if (i > resultLength) {
printf("1");
}
break;
}
}
for (i = 0; i <= resultLength; i++) {
if (result[i]) {
printf("%c", result[i]);
}
}
return 0;
}

热心网友

这个很麻烦,浮点数的表示范围只有3.4e-38~3.4e38,远远达不到1000位的要求,除非用算法合并运算,这样效率又会很低,估计永远算不完 我想岔了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com