【发布时间】:2017-06-19 12:12:07
【问题描述】:
我解决了这个问题,首先计算出两个给定数字的长度,然后将具有较少数字(如果存在的话)的数字对齐到一个新数组中,这样一、十、百等与较大数字的对齐,数十、数百等 然后我想将每两个对齐元素的总和(mod 为 10)保存到一个新数组中,同时检查数字总和是否大于 10 - 只是基本的总和。现在问题出现在将两个元素添加到 aplusb 整数中,我尝试通过编写来修复它
int aplusb = (lengthA[max-i]-'0') +(temp[max-i]-'0');
但它不起作用。我被困住了,我不知道该怎么办。请帮忙。
整个代码:
#include <stdio.h>
#include <math.h>
int main(){
char a[10000];
char b[10000];
scanf("%s %s", &a, &b);
char sum[10000];
int lengthA = 0;
int lengthB = 0;
int i = 0;
while(a[i]){
i++;
} lengthA = i;
i = 0;
while(b[i]){
i++;
} lengthB = i;
char temp[10000];
int aplusb;
int carry = 0;
int max = lengthA;
int difference = abs(lengthA - lengthB);
if(lengthA>lengthB){
for(i=0; i<lengthA; i++){
temp[i+difference]=b[i];
}
for(i=0; i<=max; i++){
aplusb = lengthA[max-i]+temp[max-i]; //<-- this is the problematic line
if(carry = 1) aplusb++;
if(aplusb>9){
carry = 1;
aplusb%=10;
}
sum[i]=aplusb;
}
}
for(i=0; i<=max; i++){
printf("%c", sum[i]);
}
/*
if(lengthB>lengthA){
max = lengthB;
for(i=0; i<lengthB; i++){
temp[i+difference]=a[i];
}
}*/
return 0;
}
【问题讨论】:
-
10 ^ 10000是10010。int就足够了。 -
if(carry = 1)是分配。改为if(carry == 1) -
我的意思是 10 的 10000 次方 @Olaf
-
为什么这么复杂?为什么要使用具有实现定义签名的类型?
-
我想不出一个更简单的方法来总结巨大的数字。 - 还有第二个问题是什么意思,我不太明白。 @Olaf