gpt4 book ai didi

c++ - 使用数组添加两个大数

转载 作者:行者123 更新时间:2023-11-28 07:07:44 25 4
gpt4 key购买 nike

对不起我的英语。我编写了一个将两个大数相加的程序。Number 1是从文件data1.in中读取的,第二个也是一样,data2.in。问题是当我尝试添加 68925579999999999990+7992557999999999990 时,我得到了错误的结果:48951159999999999980。使用 python 添加这些数字我得到 148851159999999999980。我哪里错了??

#include <iostream.h>
#include <fstream.h>
#include<math.h>

int n = 0;
int m = 0;
const int zerou = 9000;


//using namespace std;

void zero(int*a)
{
for(int i = 0;i<zerou;i++)
a[i]=0;
}



void zero(int*a,int*b)
{
for(int i = 0;i<zerou;i++)
a[i]=b[i]=0;
}


void rebuild(int* a)
{
int temp[9000];
zero(temp);
int i;

int delta = abs(m-n)+1;//k1 -dim a
for(i = delta;i<n+delta;i++)
{
temp[i] = a[i-delta];
a[i-delta] = 0;
}
n += delta;
for(i =0;i<n;i++)
a[i] = temp[i];


}



void rebuildS(int* a)
{
int temp[9000];
zero(temp);
int i;

int delta = abs(m-n)+1;//k1 -dim a
for(i = delta;i<m+delta;i++)
{
temp[i] = a[i-delta];
}

m += delta;
for(i =0;i<m;i++)
a[i] = temp[i];
}


void citirea(int* ar){
ifstream f;

f.open("data1.in");
int data;
while (f>>data){
ar[n++] = data;
}
f.close();
}

void citirea_(int* ar){
ifstream f("data2.in");
int data;
while (f>>data){
ar[m++] = data;
}
f.close();
}

/*
void perDig(int*a, int*b,int *t,int i)
{
*t += (a[i]+b[i])/10;
a[i] = (a[i]+b[i]+*t)%10;

}*/


void adunarea(int*a, int* b)
{
int transport = 0;
int sum;

for(int i = n;i>=0;i--)
{
sum = a[i]+b[i]+transport;
//sum = perDig(a,b,transport,i);
if(sum >9)
{
transport = (sum)/10;
sum %=10;
}
a[i] = sum;

}


}



int main()
{
int a[9000],b[9000];
zero(a,b);

citirea(a);
citirea_(b);

if(n > m)
rebuildS(b);

else if(m > n)
rebuild(a);
adunarea(a,b);


ofstream rez;
rez.open("data.out");
for(int i = 0;i<m;i++)
{
rez<<a[i]<<" ";

}

rez.close();
cin.get();
return 0;
}

最佳答案

您的回答有两个错误。如果 (!sum > 9) 您不将传输归零,那么数字将永远携带。你将少一位数字,因为你添加了 N 位数字并且在答案中不考虑第 N+1 位数字,如果运输!= 0。

不过,你有一个更大的问题。您不知道如何自己调试代码。如果有疑问,让程序告诉你它执行的每个步骤,阅读它所说的内容,看看哪里出了问题。知道如何执行此操作比 10 个正确的代码版本更有值(value)。

void adunarea(int*a, int* b)
{
int transport = 0;
int sum;

for(int i = n;i>=0;i--)
{
cout << a[i] << " + " << b[i] << " + " << transport << endl;
sum = a[i]+b[i]+transport;
if(sum >9)
{
transport = (sum)/10;
sum %=10;
}
a[i] = sum;
cout << " = " << sum << " ( " << transport << " )" << endl;
}
}

我所做的只是添加了两个打印语句,有了它和正确的答案,您就可以找到第一个不正确的数字,并绝对了解有关错误数字是如何产生的所有信息,然后修复它。

关于c++ - 使用数组添加两个大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com