用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位的要求,除非用算法合并运算,这样效率又会很低,估计永远算不完 我想岔了